初学Git的时候,pull
和fetch
让我迷惑了很久,两者都说是从远程分支取回数据到本地分支,今天,总算是搞懂了他们的区别。
fetch
在第一次clone
远程仓库的时候,在本地会有一个不可移动的origin/master
分支,以及一个可以移动的本地master
分支。
在本地的master
工作的时候,本地的master会向前移动,而origin/master
是不可以移动的。如上图所示。
git fetch [远程仓库名] /[仓库名]
是取回远程分支,更新本地的origin/master
分支到最新的位置。这个时候,我们的本地master分支是不变的。如果要得到最新的数据,还要git merge origin/master
。
pull
上面提到了,本地的origin/master
分支是不可以移动的,如果想要直接在origin/master
分支的最新状态上改动,可以在这个地方新开分支,然后在新分支上改动。
从远程分支 checkout
出来的本地分支,称为 跟踪分支 (tracking branch)。跟踪分支是一种和某个远程分支有直接联系的本地分支。在跟踪分支里输入 git push
,Git 会自行推断应该向哪个服务器的哪个分支推送数据。同样,在这些分支里运行 git pull
会获取所有远程索引,并把它们的数据都合并到本地分支中来。
所以git pull
命令,就是先fetch
远程的分支,然后将远程分支合并到本地分支。
在克隆仓库时,Git 通常会自动创建一个名为 master
的分支来跟踪 origin/master
。这正是 git push
和 git pull
一开始就能正常工作的原因。
参考
- git-scm 我发现这真是一个好东西,从这里能学到几乎所有用到的git知识。
- 我整理的一个git命令速查表:https://gist.github.com/laixintao/81079c85a5e4988f21a918a3af643e47
Gist 真他么是个好东西啊!
是啊,用起来感觉特别开放,要是知道的早我就不在WordPress的插件里写代码了,全贴在gist上。
Gist 在墙内能用了?
不能……加载不出来,disqus也加载不出来。不明白有什么好屏蔽的。
应该是怕宣传反动言论吧 。。。
学习带来乐趣,谢谢博主!
很不错的样子⊙0⊙