我正在同时开发两个功能,"feature1" 是 "feature2" 的基础。我为它们创建了两个分支; 当我在开发 "feature1" 时,我提交到 "feature1" 分支;当我在开发 "feature2" 时,我提交到 "feature2" 分支,并定期将 "feature2" 在 "feature1" 的基础上进行变基(rebase):
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,并在此基础上重新设置feature2的状态:
feature1: D
feature2: D -> P' -> Q' -> R'
简单地说,我在 feature1 上运行了交互式变基,成功地将 A、B 和 C 合并成了 D,并尝试在 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
我最终得到了我需要的结果。但是,首先,如果你不知道这一点,这并不显而易见;其次,容易忽视和跳过潜在的真正合并冲突。后者应该不太可能发生,但如果发生了,那就相当糟糕,因为你将永久失去相应的更新。
所以,我的问题是:是否有更好的方法在最近有一些提交被压缩成一个分支的情况下重新设置你的分支?