怎么可能两次提交分支?

时间:2013-01-07 09:53:03

标签: git github

我有以下Git历史记录:

    D-E-A-B-C-A-B-C (feature2)
   /
  *-D-E (feature1)
 /
*-F (develop)

我不知道A,B和C是如何两次在feature2上结束的。我一直在使用git rebase feature1git rebase --onto develop feature1为feature1打开和关闭feature2。我已经通过挑选A,B和C对一个新鲜的分支进行纠正来纠正这种情况,但是:这怎么可能发生呢?我很难过。


修改

不知道 Github在这里做了什么,但现在Git说:

Your branch and 'origin/feature2-fresh' have diverged,
and have 113 and 100 different commit(s) each, respectively.

所以看来这是Github的错?

2 个答案:

答案 0 :(得分:4)

以下是发生的事情:

  • 所以我将feature2重新定位到feature1
  • 我将feature2重新加入develop
  • 我推了feature2,然后意识到还有更多工作要做,所以rebase再次跳舞(feature1需要运行feature2)。

现在,feature2独有的所有提交的SHA-1与origin/feature2上的相应提交不同。
没有意识到,我做了pull。 Git尽职尽责地合并所有提交,因为它们有不同的SHA。这个故事的寓意是:

不要重新推销推送的分支。

答案 1 :(得分:1)

一种可能性:
重复提交可以成为git cherry-pick的标志(请参阅“git - what is cherry-pick?”和its duplicate commit issue)。

如果在rebase之后的任何时候对A和B进行挑选,则可以将它们添加到feature2中,即使该分支已经包含A和B(具有不同的SHA1)。

如果在 rebase之前选择A和B ,那么A和B不应该重复(来自git rebase man page

  

如果上游分支已经包含您所做的更改(例如,因为您邮寄了上游应用的补丁),那么将跳过该提交。