git rebase upstream / master vs git pull --rebase upstream master

时间:2013-03-24 18:01:29

标签: git git-rebase git-pull

git rebase upstream/mastergit pull --rebase upstream master之间是否存在差异?若然,那又是什么?遥控器可以是任何遥控器,不一定是上游。

1 个答案:

答案 0 :(得分:40)

git pull --rebasefetch (git fetch)首先更新upstream/master提交。

如果您只是在没有首次更新upstream/master的情况下重新定义,则不会得到相同的结果。

我在“master branch and 'origin/master' have diverged, how to 'undiverge' branches'?

中说明了这一点

SnakE提及git pull --rebase git fetch && git rebase origin/master <{em> (origin/master) | A--B--C (master) \ B'--D (actual origin/master after changing B and force pushing) 。{ 请参阅“in the comments

git pull --rebase

在这种情况下,git fetch origin git rebase --onto origin/master B master 的作用是:

origin/master

下面:

  • origin / master是新更新的B'B
  • origin/master是旧的master(在获取更新之前)
  • origin/master是要在git fetch
  • 之上重播的分支

这与git rebase origin/master + pull --rebase的不同之处在于origin/master命令会尝试找出哪些提交真正您的本地提交,哪些提交来自早先获取的上游。

  

为此,它会查看远程跟踪分支的reflog(在这种情况下为git fetch)。此reflog代表origin上以“最近的第一个”顺序进行的origin/master@{1}次操作的提示。

     

对于每个reflog条目,(...{2},然后是master,等等),它会检查该提交是否是当前分支头B的祖先。一找到它,它就会选择它作为rebase的起点(上例中的{{1}})。