也许我误解了GIT是如何运作的。
我已经运行git rebase -i HEAD~10
,我可以将10个提交压缩成一个。问题是所有被压缩的提交仍然存在,我认为它们将在将它们合并为一个之后被删除。
这是预期的结果吗?如果是这样,我可以重写历史记录以删除无用的提交(因为这些更改已经在提交中,所有以前的提交都被压缩了)?
答案 0 :(得分:4)
当您开始交互式rebase会话时,应该会提示您当前分支的最近10次提交的列表:
git rebase -i HEAD~10
pick as2i8dw most recent commit
pick ee361eb second most recent commit
...
pick b2762sx tenth most recent commit
您需要将此文件更改为以下内容:
pick as2i8dw most recent commit
squash ee361eb second most recent commit
...
squash b2762sx tenth most recent commit
然后您需要执行git commit
来保存更改。现在,在执行git日志时,您应该只看到as2i8dw
提交,而不是其他十个提交。
话虽如此,这就是你做的吗?
答案 1 :(得分:0)
问题是所有压扁的提交仍然存在
如果这些提交仍然可以被任何其他引用(其他分支或标记)访问,那么即使在当前分支被重新命名之后,仍然可以看到它们。
请改为squashing the commits with a git reset --soft
如果HEAD仍然引用您的10次提交:
git reset --soft HEAD~10
git commit -m "squashed 10 commits"
答案 2 :(得分:0)
我遇到了类似的问题,并找出了它的实际原因: 流程:
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
时,它将拉出本地不存在的其余提交(基本上所有你之前已经压缩过的提交,因为它现在存在于一个提交中)因此你也看到了之前的提交。
如果您确信自己没有添加新的更改,那么更好的方法是git push -f
到您的远程分支。
P.S:如果远程分支中有任何新的更改,最好:
git rebase origin remote_branch
然后压缩你的提交。