3

我有以下 Git 历史:

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

我不知道 A、B 和 C 是如何两次出现在 feature2 上的。git rebase feature1我一直在使用and重新调整 feature2 的基础git rebase --onto develop feature1。我已经通过挑选 A、B 和 C 到新的分支开发来纠正这种情况,但是:这怎么可能发生?我难住了。


编辑

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

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

所以这似乎是 Github 的错?

4

2 回答 2

4

这是发生的事情:

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

现在所有唯一提交的 SHA-1feature2origin/feature2.
不知不觉中,我做了一个pull. Git 尽职尽责地再次合并所有提交,因为它们具有不同的 SHA。这个故事的寓意是:

不要对推送的分支进行变基。

于 2013-01-07T14:35:12.847 回答
1

一种可能性:
重复提交可能是一个迹象git cherry-pick(请参阅“ git - 什么是樱桃挑选?及其重复提交问题)。

如果 A 和 B 在变基后的任何时候被挑选出来,即使该分支已经包含 A 和 B(具有不同的 SHA1),它们也可以添加到 feature2 中。

如果 A 和 B 在变基之前被挑选出来,那么 A 和 B 不应该被重复(来自git rebase手册页

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

于 2013-01-07T10:28:01.313 回答