我正在同时开发两个功能,“feature1”是“feature2”的基础。我为他们创建了两个分支;当我在 feature1 上工作时,我提交到“feature1”分支;当我在 feature2 上工作时,我提交到“feature2”分支,并定期在“feature1”之上重新定义“feature2”:
git checkout feature2
git rebase feature1
... work ...
git commit ...
所以,在某个时刻,我有这样的结构:
feature1: A -> B -> C
feature2: A -> B -> C -> P -> Q -> R
至此,我完成了 feature1;我想将 A、B 和 C 压缩为单个提交 D ,并根据 feature1 的新状态重新设置 feature2 :
feature1: D
feature2: D -> P' -> Q' -> R'
头脑简单,我在 feature1 上运行交互式 rebase,成功将 A、B 和 C 压缩为 D,并尝试 rebase feature2
git checkout feature2
git rebase feature1
现在,git 将 D 拉入 feature2 分支并尝试在其上重新应用 A、B、C、P、Q 和 R。当然,A、B、C 中的更新已经被 D 应用了,所以会导致合并冲突。
我通过反复试验发现,当重新应用 A、B 和 C 时报告合并冲突时,我只需要运行
git rebase --skip
我最终得到了我需要的结果。但是,首先,如果您还不知道,这并不明显,其次,很容易忽略和跳过潜在的真正合并冲突。后者应该不太可能发生,但如果发生这种情况,那就太糟糕了,因为你会永远失去相应的更新。
所以,我的问题是:有没有更好的方法来将你的分支重新建立在一个分支上,其中一些提交最近被压缩成一个?