Git 压缩并删除以前的提交

Git Squash and remove previous commits

也许我误解了 GIT 的工作原理。

我已经 运行 git rebase -i HEAD~10 并且我可以将 10 个提交压缩为一个。问题是所有被压扁的提交仍然存在,我认为在 将它们全部合并为一个 .

之后它们会被删除

这是预期的结果吗?如果是这样,我是否可以重写历史以删除无用的提交(因为这些更改已经在所有以前的提交都被压缩的提交中)?

The issue is that all squashed commits are still there

如果这些提交仍然可以通过任何其他引用(其他分支或标记)访问,那么即使在当前分支变基之后,这些提交仍然可见。

试试 squashing the commits with a git reset --soft.
如果 HEAD 仍然引用你的 10 次提交:

git reset --soft HEAD~10
git commit -m "squashed 10 commits"

当您开始交互式 rebase 会话时,系统会提示您列出当前分支的最后 10 次提交:

git rebase -i HEAD~10

pick as2i8dw first commit
pick ee361eb second  commit
...
pick b2762sx most recent commit

您需要将此文件更改为以下内容:

pick as2i8dw first commit
squash ee361eb second commit
...
squash b2762sx most recent commit

然后你需要做一个git commit来保存更改。现在,在执行 git 日志时,您应该只会看到其他十个中的 as2i8dw 提交和 none。

话虽这么说,这是你做的吗?

我遇到了类似的问题并找出了它的实际原因: 流量:

git rebase -i HEAD~10
# Retain the first commit from below( as pick) and change the rest of the `pick` to `squash`
# After your rebase is successful
git log
# You can see all your commits squashes to one commit

然后现在当你从你的远程分支 git pull 时,它将拉取本地不存在的其余提交(基本上是你之前压扁的所有提交,因为它现在存在于一个commit),因此您也会看到以前的提交。

更好的方法是 git push -f 到您的远程分支,如果您确信那里没有添加新的更改。

P.S:如果远程分支有任何新的变化,最好:

git rebase origin remote_branch 

然后压缩你的提交。