使用 rebase 压缩期间丢失的更改

Lost changes during squash with rebase

我尝试运行

git rebase -i HEAD~N

将我的旧提交压缩为一个。但有时我会遇到合并冲突。问题是,即使我解决了冲突并执行“git rebase --continue”,我也丢失了很多其他提交更改。

我也尝试根据这些答案解决问题:Git squash all commits in branch without conflicting

如果您需要对包括合并提交在内的一系列提交进行变基,请添加 -m 选项:

git rebase -i -m HEAD~N

sequencer 脚本将允许您描述如何在重写中包含该合并。

您可以通过使用 reset --soft 来避免使用 rebase 进行压缩。假设你想要从 HEAD~100 压缩到你当前的分支(HEAD~100 是最后一个不会被压缩的幸存提交):

git reset --soft HEAD~100
git commit -m "Squashed stuff"

就是这样。没有冲突,没有麻烦。

软重置有效,但我找到了更好的解决方案。问题是我想压缩的提交中已经有一个合并提交。我使用以下代码获取父提交:

git show --pretty=%P COMMIT_HASH

最后,我不得不使用父提交的哈希来进行变基。