git常用命令

一个具有动画演示的学习git命令的网站:https://learngitbranching.js.org/?locale=zh_CN

基础篇

Git Commit

commit1.png

commit2.png

1
2
git commit
git commit

Git Branch

branch1.png

branch2.png

1
2
git branch bugFix
git checkout bugFix

Git Merge

一种分支合并的方法。不会移动之前的工作,创建新的合并提交。

merge1.png

merge2.png

1
2
3
4
5
6
git branch bugFix
git checkout bugFix
git commit
git checkout main
git commit
git merge bugFix

Git Rebase

一种分支合并的方法。Rebase是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。

rebase1.png

rebase2.png

rebase3.png

1
2
3
4
5
6
7
8
9
10
git branch bugFix
git checkout bugFix
git commit
git checkout main
git commit
git checkout bugFix
git rebase main

git checkout main
git rebase bugFix

高级篇

分离HEAD

head总是指向当前分支上最近一次提交记录。

head1.png

head2.png

1
git checkout C4

相对引用

^表示父提交,~3表示第3级父提交。

相对引用1.png

相对引用2.png

1
git checkout C4^

相对引用3.png

相对引用4.png

1
2
3
4
git checkout C6
git branch -f main HEAD
git checkout C1
git branch -f bugFix HEAD^

-f表示强制移动

撤销变更

  • git reset:适用于单人使用的本地分支
  • git revert:适用于多人使用的远程分支,可以撤销更改并分享给别人

撤销变更1.png

撤销变更2.png

C2'引入了更改,是用来撤销C2这个提交的,C2'状态与C1相同。

1
2
3
git reset local~1
git checkout pushed
git revert pushed

远程仓库

Git Fetch

将远程仓库更新的数据下载了下来,但并没有修改本地的文件。

fetch1.png

fetch2.png

1
git fetch

Git Pull

pull = fetch + merge

pull --rebase = fetch + rebase

pull1.png

pull2.png

1
git pull

制造远程仓库的变更

remotechange1.png

remotechange2.png

假设 git fakeTeamwork是在远程仓库的main分支上做一次提交。

1
2
3
4
5
6
git clone
git fakeTeamwork
git fakeTeamwork
git commit
git fetch
git merge o/main

Git Push

push1.png

push2.png

1
2
3
git commit
git commit
git push

目录偏离

情景大概就是远程仓库修改了,然后本地也做了修改,如何进行统一?直接push是不行的。

我们用 git fetch 更新了本地仓库中的远程分支,然后用rebase将我们的工作移动到最新的提交记录下,最后再用 git push 推送到远程仓库。

目录偏离1.png

目录偏离2.png

1
2
3
4
5
git clone
git fakeTeamwork
git commit
git pull --rebase
git push

main锁定

在合作团队中工作时,main可能被锁定,需要一些Pull Request流程来合并修改。如果提交(commit)到本地main, 然后试图推送(push)修改, 将会收到这样类似的信息:

! [远程服务器拒绝] main -> main (TF402455: 不允许推送(push)这个分支; 你必须使用pull request来更新这个分支.)

新建一个分支feature, 推送到远程服务器. 然后reset本地的main分支和远程服务器保持一致, 否则下次pull并且他人的提交和本地冲突的时候就会有问题.

main锁定1.png

main锁定2.png