Git变基不在基础分支的顶部应用更改

时间:2012-12-12 05:43:41

标签: git git-rebase

我有分支说“实验”,它被推了几天。现在,主人已经更新,我需要在将其重新定位到主人之后再次推送实验。但是当我把它变成掌握时,我没有在主人身上看到实验的补丁。我的实验分支指向掌握。

可能有什么不对?可能是因为这个实验分支已经与主人或其他东西合并了吗?

Git状态

  

$ git status
  关于分支实验
  未跟踪的文件:
  (使用“git add ...”包含将要提交的内容)
  A.TXT
  没有添加到提交但未跟踪的文件存在(使用“git add”跟踪)

Git log

  

$ git log experiment
  commit bc6c71d5ec6d8798aa283c9feaec844cd03edc60
  作者:ssrivastava
  日期:2012年11月27日星期二12:15:37 +0530
          [实验]为玩家状态添加了索引

关于rebase to master

  

首先,倒带头重播你的作品......
  快速转发实验掌握。

通常在应用rebase时,它会在基本分支顶部的当前分支上应用最新的更改,但我在这里看不到任何内容。

1 个答案:

答案 0 :(得分:1)

一般来说,在重新定位时,Git足够智能,可以检测哪些提交无效并将其排除。因此,当您在master中进行与实验分支中的提交相同的更改时,将跳过该提交,因为它不会更改任何内容。虽然在审查rebase时这种行为可能会让人感到困惑,但事实并非如此。

通过找到两个分支的共同祖先来实现rebase;然后用作旧基地。在您的情况下,由于您已将实验分支的更改合并到主分支中,因此通用的ancenstor是合并提交。现在提交与主要指向的提交相同,它实际上是实验分支的子代(在合并之前指向实验分支中的父代):

B --- * --- O --- M       B ~ old base, O ~ old master
 \               /        M ~ current master (the merge commit)
  * --- * ----- E         E ~ experiment branch

因此,master已经包含完整的实验分支,并且M实际上是通过一次提交在实验分支之前。如果Git现在在master上重放实验分支中的提交,它将跳过这些提交,因为它们是空的 - 所有更改都已在master内部。所以基本上它会以快进结束。现在,由于Git很聪明,它不需要尝试在master之上应用所有这些提交,以确保它们都会被跳过。由于主人领先于实验分支,情况总是如此。因此,它可以直接快速将实验分支转发到掌握。