git的基本知识

目录

1、git pull
2、git commit
3、git clean
4、提交代码时忘记pull
5、提交错分支
6、git push -f
7、git revert
8、git commit 之后有人push
9、保存修改和删除,但是不包括新建文件 git add -u
10、追踪改变
11、git worktree
12、其他命令
13、本地修改的某个文件想要撤回
14、git rebase
15、代码提交到远程,想撤回提交后,代码恢复没有push的状态,上一次更改的代码保留
16、本地分支直接和远程同步
17、修改本地分支以及远程分支名

1、git pull冲突时:

git pull // 发生冲突

git stash 

git pull

git stash pop(有冲突解决冲突)

git add .

git commit -m ""

git push
2、commit信息填写错误后修改commit信息
git commit -m "《commit信息错误》"

修改commit信息 git commit - amend -m "《新的commit信息》"

git push即可
3、对于修改和添加的文件,突然被通知此功能不需要了,要回到上一个commit版本,正常来说,git reset --hard可以进行版本回退,但是reset只影响没有track过的文件,git clean可以删除没有track过的文件,所以二者长结合使用。

git clean 参数

-n 是一次clean的演习, 告诉你哪些文件会被删除. 记住他不会真正的删除文件, 只是一个提醒,

显示 将要 删除的 文件 和 目录

-f 删除 文件

git clean -f <path>  删除指定路径下的没有被track过的文件

-df 删除 文件 和 目录

git clean -xdfe *.txt(使用e删除所有未追踪的出来.txt结尾的文件)

如果有提交在暂存区,那么要撤销可以

git reset --hard

 git clean -xdf 

如果没有加入暂存区

git checkout . && git clean -xdf

4、提交代码时忘记pull

撤销commit --------- girt reset --hard HEAD^

撤销add ---------- git reset HEAD

重新 pull add commit

5、提交错分支

git checkout 分支

git cherry-pick 相应节点

add commit push

6、尽量不要用 `git push -f`强制推送可能会覆盖他人代码,并且删除要用有记录的方式,后悔了还可以撤回
7、git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一次最新的提交

git revert HEAD 撤销前一次 commit

git revert HEAD^ 撤销前前一次 commit

git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进 行保存)


git revert commit_id
//如果commit_id是merge节点的话,-m是指定具体哪个提交点
git revert commit_id -m 1
//接着就是解决冲突
git add -A
git commit -m “…”
git revert commit_id -m 2
//接着就是解决冲突
git add -A
git commit -m “…”
git push


8、git commit 之后有人push

git pull -r

git push

9、 保存修改和删除,但是不包括新建文件 git add -u
   保存新的添加和修改,但是不包括删除 git add .

   保存所有文件git add -A
10、如果你没有add 或者commit追踪改变的文件,但是用git reset --hard 删除了本地改变的文件,那么将是毁灭性的操作,后悔了也找不回来了,但是如果你add过了,那还有救

试一下git fsck --lost-found操作吧

这条信息参考https://www.cnblogs.com/hope-markup/p/6683522.html

11、在git worktree出现之前,git切换分支前后的文件都只存在在当前文件夹下,git worktree出现之后,我们可以将分支切换到其他文件夹下。

比如如果你的项目有很多个版本分支,在git worktree出现之前, 为了维护不同版本你就需要频繁切换本, 如果项目还不小的话, 切换成本还是不小的。

以我前端为例,由于node_modules文件夹被忽略无法被跟着分支来回切换,导致切换不同版本后还需要重新安装npm,很麻烦。这时使用git worktree将分支检出到另外其他文件夹就可以避免这个问题。将分支用git worktree检出到其他文件夹的好处很明显::可以同时维护多个分支代码、可以对比不同分支的代码行为等等

git worktree add -b <新分支名> <新路径> <从此分支创建>

例如:

1、现在正在develop分支开发,希望从master分出一个分支来解决某个紧急的BUG

git worktree add -b newbranch …/bugfix master

2、不希望添加分支,只建立文件夹情况:git worktree add …/folderName

这样,原本的仓库文件夹的同级目录下会出现一个 bugfix 文件夹。这个仓库里只有一个.git文件用来记录这是主仓库的一个工作目录。

自此,这两个工作目录在工作上看起来就像两个独立的仓库一样,都可以运行各种命令,包括切换分支。

打开新的文件夹bugfix,可在里面切换分支直接开发,因为是同一个.git文件,在此文件夹中的操作就和原来的一样

相比于克隆多个仓库,使用这种方法创建的多个目录,有诸多好处:

1、只有一个仓库会占用版本库的空间,其它只占用工作目录的空间,对大型项目而言非常节省空间。

2、因为所有工作目录共享一个仓库,所以一个更新意味着整个更新(A目录里对分支做的改动,B目录里切到此分支也是改动后的;避免到时候找不到某个未推送的改动改到了哪个仓库)

注意事项

使用 git worktree 创建的多个目录,不能有任何两个目录在同一个分支下。

如果要删除其中一个工作目录,直接删除文件夹即可。随后使用命令清除多余的已经被删的工作目录:

用git worktree prune来清理已不存在的关联工作目录的记录文件。

查看:git worktree list

12、其他命令

文件rebase之后有冲突,那么可以用git checkout --(theirs/ours)
git update-index --assume-unchanged /path/to/file #忽略跟踪
git update-index --no-assume-unchanged /path/to/file #恢复跟踪
git update-index --really-refresh查看当前索引并通过检查信息查看是否需要合并或更新。

例如: 需求是我和同事合作开发一个项目。同事要新建一个分支,然后,我这边拉取这个分支即可。
然而同事新建分支并且推送到远程仓库之后,我这边通过git branch -a并不能看到这个分支。那么可以用:

git fetch( 获取远程仓库的新分支)
git fetch -p(删除远程仓库已删除的分支)

13、本地修改的某个文件想要撤回

可参考大全:https://blog.csdn.net/trochiluses/article/details/14519303

从分支或者索引中检索文件到当前目录:

项目中遇到把本地first-content文件还原成远程master的first-content文件,就进行了某个指定文件的回退

14、git rebase (相当于git merge)

用rebase之后的分支更干净,如果rebase之后有冲突,那么解决冲突之后应该是git rebase --continue,如果忘记了,写成了git add .等等,那么rebase显示变基中的情况下,可以用git rebase --abort退出rebase模式,回到rebase之前的状态。

git rebase --skip表示跳过当前冲突。


我本地有更改 准备提交
然后我git stash
然后我需要rebase develop分支
我就直接 git pull --rebase origin develop
然后git stash pop 解决冲突
然后 add commit push
这样就不需要切到另一个分支,pull代码再切到当前分支rebase后解决冲突了


15、git reset –soft + commitId

16、git reset --hard origin/分支名

17、修改本地分支以及远程分支名

一、git branch -m old_branch new_branch 修改本地分支

二、 git push origin :old_branch 删除远程分支

三、 git push --set-upstream origin new_branch 新增远程分支


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值