如何删除不需要的git分支“循环”

时间:2017-05-03 22:28:53

标签: git

在分支上进行交互式变基和合并时,我“管理”了以创建以下分支循环:

---a-----------g--h----m--n---
    \--b--c--d--e--f--/
  • b,c,d,e和f提交是在调试期间完成的。
  • g和h提交源于交互式变基
  • m提交导致合并......
  • 我想保留a-g-h-m-n的历史并摆脱-b-c-d-e-f的历史。我怎么能这样做?

让我澄清一下,我的目标是消除 -bcdef - 历史记录行,保持 m 合并并以单行 -aghmn结束 - 历史。

2 个答案:

答案 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 hmaster移回h
  • git cherry-pick nn重新发送到h

请注意,这将导致n具有新的提交ID。如果推送n,这将导致其他贡献者出现问题。拥有n的任何人在下次尝试推送或拉取时都会收到错误,并且需要git pull --force

答案 1 :(得分:-1)

如果要删除分支中的所有提交,最简单的解决方案是使用git revert <commit>

Undoing changes页面上详细介绍了还原的使用。

使用revert意味着历史记录保持不变,如果您已将代码推送到远程存储库,这将特别有用。