首页 > 解决方案 > 在 Bitbucket 中丢弃一个混乱的 git fork

问题描述

出于开发目的,我使用主项目的一个分支。时不时地,我拉入父回购:

git fetch parent
git merge parent/master

在这种情况下,其他人做了很多工作,所以当我这样做时,我拉入了 147 次提交,这git status表明我远远领先于origin(我的 fork)。我做了一些工作。我做了五次提交,但我想将最后两次压缩为一次提交。这里通常的技巧是做git rebase -i,然后将最后一条消息编辑为squash. 我这样做了。

当我看到列表有多么庞大时,我没有保存更改就退出了。将两个提交压缩为一个并不是那么重要,所以我放弃了这个想法。但是,git 仍然遍历提交列表,重做所有提交,这需要很长时间。

当我推送,然后在 Bitbucket 上打开一个拉取请求时,Bitbucket 尝试应用所有提交,而不仅仅是我自己完成的那些。而且由于此后进行了其他更改,这导致了我没有触及的代码中的一堆合并冲突。

有什么巧妙的方法可以解决这个问题吗?我正在考虑对我的分叉进行核对并重新分叉(我的分支都不包含任何有价值的东西),但也许我可以尝试一些破坏性较小的东西?

标签: gitbitbucketmerge-conflict-resolutiongit-fork

解决方案


你可以在你的 fork 中对单个分支进行 nuke 并将它们重置为父级的位置:

git fetch parent
git checkout master
git reset --hard parent/master
git push -f

那样的话,你仍然会有一些你想要保留的提交,并且你可以在之后通过它们所在的分支或通过 reflog 来挑选它们。


推荐阅读