压缩提交一直到初始留下 2 次提交

squashing commits all the way to the initial leaves 2 commits

我正在学习 git 并尝试压缩。我想压缩 master 上的所有提交,只留下最初的提交。例如,我的提交历史如下所示:

2c825e339b60702b7b48c2ea022e473341d89a7d (HEAD -> master) another edit
f676a10db6a0cfe3cebb8f84aad971b481483181 second file
dc55b957a94bc4a3d6c1b6d8c134407aa4c8316c initial

之后我运行git rebase -i dc55b957a94bc4a3d6c1b6d8c134407aa4c8316c

网络上描述的通常方法是将每个 pick 替换为 squash,但第一个。这样做之后,我看到了这个提交历史:

2067070140c38f8ecf5f70894e6267bfee614d85 (HEAD -> master) second file dc55b957a94bc4a3d6c1b6d8c134407aa4c8316c initial

为什么 squash 没有一直工作到初始提交?

此外,如果我再次运行相同的压缩命令,在交互式window中只有1个pick statement。将其更改为 squash 会触发错误,而将其保留为 pick 则不会执行任何操作。我找到了

git reset --soft HEAD~1
git commit -m "1.0.0"

成为压缩 2 次提交的有效方法。我怎样才能使用 git rebase --squash 获得相同的结果?

您在 rebase 命令中指定的提交是您要修改或移动的第一个提交的 parent。这对于存储库的第一次提交很困难,因为它没有任何 parents。相反,您可以使用 --root 选项:

git rebase -i --root

这应该给你所有的提交。

你必须做 git reset --soft HEAD~2 然后做 git commit --amend -m 1.0.0