我不小心把一个有大量提交(+1000)的分支压缩到了主分支,之后又有一些提交被压缩到了其中的一些提交文件中,现在,我想把那些+1000的提交“解压缩”。关于如何在不丢失覆盖这些提交的提交的情况下解除压缩这些提交,您有什么想法吗?我试过重置主分支到压缩前,然后再合并+1000次提交的分支,但是没有成功,因为压缩后的提交丢失了。另外,如果我再合并主分支,压缩提交仍然存在,并且会覆盖Git Blame中的其他提交。
ddrv8njm1#
从@Schwern的回答中复制回图表:
A - B - C - D - E - F - SQUASH - G - H [main] \ 1 - 2 ... 1000 [branch]
如果运行:
git rebase --onto 1000 SQUASH H
您应联系:
A - B - C - D - E - F - SQUASH - G - H [main] \ 1 - 2 ... 1000 - G1 - H1 < HEAD (detached HEAD state) ^ [branch]
然后您可以从几种方式中选择更新[branch],其中之一是:
[branch]
git switch branch git merge --ff-only H1
bweufnob2#
我意外地将一个包含大量提交(+1000)的分支压缩到了主分支。在壁球之前,你的回购是这样的:
A - B - C - D - E - F [main] \ 1 - 2 ... 1000 [branch]
打完壁球后,就像这样...
A - B - C - D - E - F - SQUASH [main] \ 1 - 2 ... 1000 [branch]
...假设您没有删除分支。在那之后,对其中一些提交文件进行了一些提交。假设你的意思是在main中添加了commits,那么你的repo现在看起来像这样:
关于如何在不丢失覆盖这些提交的提交的情况下解除压缩这些提交,您有什么想法吗?是,执行交互式变基并删除压缩提交。在挤压之前选择一个提交,然后开始交互式变基:git rebase -i <commit>。编辑器会显示你所选择的提交之后的所有提交。只需删除包含压缩的行,保存,然后退出编辑器。Git会在前一次提交(F)的基础上重写压缩后的提交(G - H)。查看Rewriting History了解更多关于交互式提交的细节。
git rebase -i <commit>
A - B - C - D - E - F - G1 - H1 [main] \ 1 - 2 ... 1000 [branch]
然后,如果您已经推送了main,则使用git push --force-with-lease安全地推送新分支。
git push --force-with-lease
***最新情况***观察员办公室的评论表明,情况要复杂得多。
超过1000次提交的分支表明您的流程中有问题,或者非常异常,我鼓励您提出有关该流程的问题。您的repo看起来像这样,为了简单起见,我只展示了两个squash和两个merge。你想要这个。你可以通过一个变基来实现,但是要注意保留合并。
git rebase -r --onto B S2 main
其中“S2”是你想删除的最后一个压缩合并。-r告诉Git保留合并提交。这个 * 应该 * 起作用,但要准备好用git reset --hard ORIG_HEAD撤销它。更多信息请参见合并的重新定基。
-r
git reset --hard ORIG_HEAD
2条答案
按热度按时间ddrv8njm1#
从@Schwern的回答中复制回图表:
如果运行:
您应联系:
然后您可以从几种方式中选择更新
[branch]
,其中之一是:bweufnob2#
我意外地将一个包含大量提交(+1000)的分支压缩到了主分支。
在壁球之前,你的回购是这样的:
打完壁球后,就像这样...
...假设您没有删除分支。
在那之后,对其中一些提交文件进行了一些提交。
假设你的意思是在main中添加了commits,那么你的repo现在看起来像这样:
关于如何在不丢失覆盖这些提交的提交的情况下解除压缩这些提交,您有什么想法吗?
是,执行交互式变基并删除压缩提交。
在挤压之前选择一个提交,然后开始交互式变基:
git rebase -i <commit>
。编辑器会显示你所选择的提交之后的所有提交。只需删除包含压缩的行,保存,然后退出编辑器。Git会在前一次提交(F)的基础上重写压缩后的提交(G - H)。查看Rewriting History了解更多关于交互式提交的细节。然后,如果您已经推送了main,则使用
git push --force-with-lease
安全地推送新分支。***最新情况***观察员办公室的评论表明,情况要复杂得多。
超过1000次提交的分支表明您的流程中有问题,或者非常异常,我鼓励您提出有关该流程的问题。
您的repo看起来像这样,为了简单起见,我只展示了两个squash和两个merge。
你想要这个。
你可以通过一个变基来实现,但是要注意保留合并。
其中“S2”是你想删除的最后一个压缩合并。
-r
告诉Git保留合并提交。这个 * 应该 * 起作用,但要准备好用git reset --hard ORIG_HEAD
撤销它。更多信息请参见合并的重新定基。