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

Combine all commits into one before rebase

我有一个我正在处理的本地/远程分支A。 BranchA 是从 develop 分支创建的。我已经在某个地方做出了十几个承诺。现在我正处于一个阶段,我想从同时进行的开发中提取所有更改,以便 BranchA 包含开发中的所有最新更改,因此我可以对其进行测试。

我试过将开发变基到BranchA,但是解决冲突有点困难。发生的事情是在 developer 分支中更改了一个 FileA,但我也在我的很多提交中更改了这个文件(比方说 8)。所以似乎 git 要求我解决此文件的冲突 8 次,而我希望它只询问我最新版本。

那么,我在这里有哪些选择?我应该将所有 12 次提交合并为 1 次,然后尝试变基吗?我该如何正确地做到这一点?

我不确定这里最好的行动方案是什么(通常这是相当 preference/policy 驱动的),但是如果你想做一个变基并将所有提交压缩成一个,你可以做:

git checkout develop
git rebase -i BranchA

这将打开一个编辑器,其中在 develop 上的每个提交都有一行,但在 BranchA.

中不存在

此编辑器中的说明概述了您可以执行的操作,但在这种情况下您可以:

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

squashfixup 之间的区别在于,squash 会将压缩提交的所有提交消息连接在一起,并允许您编辑此提交消息,而 fixup 只会使用其他人 "fixed-up" 提交的提交消息,不允许您对其进行编辑。

我的偏好通常是使用 squash 来至少保留一些类似的提交历史记录,但这完全取决于我的分支到那时为止的完善程度。

I have tried to rebase develop onto BranchA

否:您需要将您的分支重新定位到公共分支 develop

git checkout BranchA
git rebase develop

如果多次出现类似的合并冲突,git rerere can help

另一种方法是简单地将 develop 合并到 BranchA

The point is that I want to add the change in FileA from new develop commit, to latest version for FileA from my BranchA.

对于给定的文件,一旦 rebase 被冲突阻止,您可以简单地检出它:

 git checkout develop -- FileA
 git rebase --continue

这样,解决的速度非常快(因为您用 develop 分支中的文件覆盖了 FileA)