我正在使用git,我正在达到这种状态:
X --- Y --------- M1 -------- M2 (my-feature)
/ / /
/ / /
a --- b --- c --- d --- e --- f (stable)
当我们在"我的功能"分支上工作超过一天时,就会发生这种情况。M1 和 M2 从稳定分支合并到特征分支。M1和M2可能合并了已经解决的冲突。将稳定分支合并到功能分支中的整个想法是尽早处理冲突。
功能完成后,我们希望将功能分支重新设置为一个或两个提交。
问题是当我们进行交互式变基 git 时,向我们展示了我们在 M1 和 M2 合并期间已经解决的相同合并冲突。
有没有办法让 git 重用我们已经在 M1 和 M2 中完成的合并决策?
如果合并冲突相同,这是 git rerere
的完美用例,这是 git 中最有用(尽管鲜为人知(的命令之一。从手册页:
在使用生存期相对较长的主题分支的工作流中,开发人员有时需要一遍又一遍地解决相同的冲突,直到 主题分支已完成(合并到"发布"分支,或向上游发送并接受(。
此命令通过在初始手册上记录冲突的自动合并结果和相应的手动解析结果来帮助开发人员完成此过程 合并,并将先前记录的手部分辨率应用于其相应的自动合并结果。
git rerere
会记录冲突解决方案,并在git merge
、git rebase
或git commit
(提交合并时(遇到相同的冲突时自动应用它们。Scott Chacon 在这里发布了一些很好的例子,手册页也值得一读。
您可以通过发出以下命令在merge
和rebase
中启用git rerere
:
git config --global rerere.enabled true
如果您希望仅为单个存储库启用该选项,请删除 --global
标志。
git 变基 --交互 --保留-合并
一种通过单个提交使功能分支feature
到新分支feature-one-commit
的显式方法:
git checkout -b feature-one-commit
"$(git commit-tree HEAD^{tree} -m "Commit message" -p master)"
你总是可以使用 -f 标志强制它