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
然后压缩你的提交。
也许我误解了 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
然后压缩你的提交。