在分支上进行交互式变基和合并时,我“管理”了以创建以下分支循环:
---a-----------g--h----m--n---
\--b--c--d--e--f--/
让我澄清一下,我的目标是消除 -bcdef - 历史记录行,保持 m 合并并以单行 -aghmn结束 - 历史。
答案 0 :(得分:0)
我想保留a-g-h-m-n的历史并摆脱-b-c-d-e-f的历史。 ......历史中的b-c-d-e-f部分与g-h相当,我想删除b-c-d-e-f我该怎么办?
---a-----------g--h----m--n---
\--b--c--d--e--f--/
我不完全相信这是一个好主意。如果a-g-h-m和a-b-c-d-e-f-m相当,则合并不会发生。您可以查看与git diff h f
的差异并决定。
但是这是怎么做的。
您需要消除m
合并。你想要这样的东西:
---a-----------g--h----n
\--b--c--d--e--f
为此,您需要将主人移回h
,然后将n
移至h
。分支头(master
是分支头)随git reset --hard
移动。使用git cherry-pick
完成嫁接。
git checkout master
git reset --hard h
将master
移回h
。git cherry-pick n
将n
重新发送到h
。请注意,这将导致n
具有新的提交ID。如果推送n
,这将导致其他贡献者出现问题。拥有n
的任何人在下次尝试推送或拉取时都会收到错误,并且需要git pull --force
。
答案 1 :(得分:-1)
如果要删除分支中的所有提交,最简单的解决方案是使用git revert <commit>
。
在Undoing changes页面上详细介绍了还原的使用。
使用revert意味着历史记录保持不变,如果您已将代码推送到远程存储库,这将特别有用。