如何压缩所有提交记录而不丢失子模块?

7

我喜欢这个如何将所有git提交压缩成一个提交的答案。

但是,如果我执行以下操作,就会导致合并冲突:

git rebase --root -i

按照建议使用pick和squash命令。并且,当我执行操作时,我会失去我的子模块(我有5个)。

rm -rf .git
git init
git add .

什么是最有效的方法来清除所有历史记录,并保持我的子模块在它们当前的目录中,以及它们当前的sha。
1个回答

7
尝试运行git reset --soft SHAOFFIRSTCOMMIT 然后运行 git commit --amend。第一条命令将当前分支重置为第一个提交,但保留当前索引;第二条命令在最后一次提交中提交当前索引。

1
不,git reset --mixed 会重置索引。(顺便说一下,--mixed 是默认选项。)--soft 是保留索引不变的选项。 - user743382
但是如果我没记错的话,混合(mixed)在这种情况下也能胜任,对吧? - MrTux
不,一般来说并不会。在执行了 git reset --mixed 之后,你需要担心重新更新索引以使其恢复到执行 git reset 前的确切状态,这并不是一件简单的事情。 - user743382
这太棒了。我猜这也会保留人们的分支。 - J0hnG4lt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接