在变基之前将所有提交合并为一个

3
我有一个本地/远程分支A,我只在上面工作。BranchA是从develop分支创建的。我已经对它做了大约十几次提交。现在我处于这样一个阶段:我想拉取所有在此期间从develop分支进行的更改,以便BranchA包含来自develop的所有最新更改,以便我可以测试它。
我尝试将develop rebase到BranchA,但解决冲突有点困难。发生的情况是,在developer分支中更改了FileA,但我也在我的许多提交中更改了此文件(假设为8个)。因此,似乎git要求我为此文件解决8次冲突,而我希望它仅要求我解决最新版本的冲突。
那么,我有哪些选择?我应该将我的12个提交全部合并为1个,然后尝试rebase吗?我应该如何正确地执行此操作?
2个回答

1

我不确定这里的最佳操作方法是什么(通常这取决于个人偏好和政策),但如果您想将所有提交合并为一个并进行变基,可以执行以下操作:

git checkout develop
git rebase -i BranchA

这将打开一个编辑器,其中每个提交在develop上都有一行,而这些提交在BranchA中不存在。

编辑器中有说明可以告诉您可以做什么,但在这种情况下,您可以:

  • 保留最顶部(第一个)提交操作为pick
  • 将所有其他提交操作更改为squashfixup

squashfixup之间的区别在于,squash会将所有被压缩的提交消息连接在一起,并允许您编辑此提交消息,而fixup将仅使用其他提交“修复”的提交的提交消息,而不允许您编辑它。

我的偏好通常是使用squash来保留至少一些提交历史记录,但这完全取决于我的分支在那时候有多完美。


1
我尝试将develop变基到BranchA上。
不行:你需要将你的分支变基到共同分支develop上。
git checkout BranchA
git rebase develop

如果出现类似的合并冲突多次,git rerere 可以帮助解决
另一种方法是将develop合并到BranchA中。

重点是我想要将来自新develop提交的FileA更改添加到我的BranchA的最新版本的FileA中。

对于给定的文件,在重新安排被冲突阻塞后,您可以简单地检出它:
 git checkout develop -- FileA
 git rebase --continue

这样做可以非常快速地解决问题(因为你用来自develop分支的FileA覆盖了原有的FileA)


这就是我所做的,抱歉表达有误。重点是我想将来自新开发提交的FileA更改添加到我的BranchA中FileA的最新版本中。我不想为我在BranchA中对该文件进行的每个提交解决冲突,只想在第一个和最后一个之间解决冲突。合并操作会对develop分支进行更改吗?还是我可以安全地说任何git操作都只会在当前分支上进行更改? - Goran
@Goran 我已编辑答案以回应您的评论。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接