3

我在压缩提交时遇到合并冲突,并且最后一次提交最终与压缩之前不同。为什么我运行时最终结果会发生变化

git rebase -i someothercommit

然后挤压不需要的中间提交,只留下第一个?考虑到每个提交都是串联的,我不明白如何存在合并冲突。更多细节如下:

对于我的工作流程,我有几个分支 master 0somefeature 1anotherfeature 2lastfeature

通常 0feature 基于 master,1 基于 0 等等。当我对 master 进行更改时,我将 master 合并到 0feature,然后将 0feature 合并到 1newfeature 等。

这就是我运行的:

$ git log --online -5
990cfb1 combine dump, add prog, combine validate
41013a9 Merge branch '5flash_addr' into 6flash_bankcheck
6f5e8f1 nothing interesting
7b8140d nothing interesting
2347714 implementation of dump and program

$ git rebase -i 2347714

然后我压缩除 990cfb1 之外的所有提交,最终出现合并冲突,我的新提交现在与合并之前不同!

谢谢!

4

2 回答 2

3

您的声明中的“删除”一词不正确“然后我删除除 990cfb1 之外的所有提交”。你需要使用squash.

运行时$ git rebase -i 2347714,您会看到弹出的文本编辑器显示您的所有消息,如下所示:

pick 990cfb1 combine dump, add prog, combine validate
pick 41013a9 Merge branch '5flash_addr' into 6flash_bankcheck
pick 6f5e8f1 nothing interesting
pick 7b8140d nothing interesting
pick 2347714 implementation of dump and program

此时,我会说不要碰第一个!(990cfb1)。然后,对于其余的,将“pick”替换为“squash”或“s”作为别名。

现在,保存文件并退出编辑器。

然后, git rebase 将继续运行。几秒钟后,将弹出另一个文本编辑器窗口,向您显示所有提交消息。

此时,您可以安全地删除所有消息并将它们重写为一句话作为最终提交消息。

现在,保存并离开。Git 会自动执行以下操作。完毕!

边注

您在执行上述过程时可能会遇到问题,因为您的“rebase”已经运行但因某些错误而停止。

你需要:

  1. 首先将整个 git 项目的物理副本复制到其他地方!!!
  2. 然后,运行git rebase --abort
  3. 按照上述过程从干净状态开始。
于 2013-05-12T13:44:00.810 回答
0

我现在在这方面做得更好了。主要问题是将“旧”分支合并到新分支中,我多次这样做,然后在合并步骤中重新设置基础并压缩所有提交。哈希更改或提交被无序压缩一定存在问题。

更好的做法是将新分支重新设置为旧分支上的附加提交,以便提交历史是线性的(而不是将 H 合并到 G 中)。

             0feature    1feature
                |           |
                v           |
A --  B -- C -- D -- H      |
                 \          v
                  E -- F -- G

换句话说,使用上面的示意图,如果我在 D 上进行额外的提交 H(这会将 0feature 指针移动到 H),然后将 0feature 合并到 1feature (并多次执行此操作),然后尝试对整个历史进行 rebase / sqash在 0feature 和 1feature 之间,我最终会遇到问题。而不是git checkout G; git merge H我应该一直使用git rebase --onto H D G每个小清理。自原始帖子以来,我一直在做这些选项中的第二个,并且从那时起一直很好。

另外,如果这是我的提交日志:

990cfb1 combine dump, add prog, combine validate
41013a9 Merge branch '5flash_addr' into 6flash_bankcheck
6f5e8f1 nothing interesting
7b8140d nothing interesting
2347714 implementation of dump and program

我从 2347714 中变基,变基选项应如下所示:

pick 7b8140d nothing interesting
s 6f5e8f1 nothing interesting
s 41013a9 Merge branch '5flash_addr' into 6flash_bankcheck
s 990cfb1 combine dump, add prog, combine validate
于 2013-06-18T22:03:56.237 回答