Git的pull和fetch

初学Git的时候,pullfetch让我迷惑了很久,两者都说是从远程分支取回数据到本地分支,今天,总算是搞懂了他们的区别。

fetch

在第一次clone远程仓库的时候,在本地会有一个不可移动的origin/master分支,以及一个可以移动的本地master分支。

18333fig0323-tn

在本地的master工作的时候,本地的master会向前移动,而origin/master是不可以移动的。如上图所示。

git fetch [远程仓库名] /[仓库名]是取回远程分支,更新本地的origin/master分支到最新的位置。这个时候,我们的本地master分支是不变的。如果要得到最新的数据,还要git merge origin/master

18333fig0324-tn

pull

上面提到了,本地的origin/master分支是不可以移动的,如果想要直接在origin/master分支的最新状态上改动,可以在这个地方新开分支,然后在新分支上改动。

从远程分支 checkout 出来的本地分支,称为 跟踪分支 (tracking branch)。跟踪分支是一种和某个远程分支有直接联系的本地分支。在跟踪分支里输入 git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据。同样,在这些分支里运行 git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来。

所以git pull命令,就是先fetch远程的分支,然后将远程分支合并到本地分支。

在克隆仓库时,Git 通常会自动创建一个名为 master 的分支来跟踪 origin/master。这正是 git pushgit pull 一开始就能正常工作的原因。

参考

  1. git-scm 我发现这真是一个好东西,从这里能学到几乎所有用到的git知识。
  2. 我整理的一个git命令速查表:https://gist.github.com/laixintao/81079c85a5e4988f21a918a3af643e47

Git的pull和fetch”已经有7条评论

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注