8

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

我已经跑了git rebase -i HEAD~10,我可以将 10 个提交压缩为一个。问题是所有压缩的提交仍然存在,我认为在将它们全部合并为一个之后它们会被删除。

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

4

3 回答 3

5

当您开始交互式 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

然后您需要执行 agit commit来保存更改。现在,在执行 git log 时,您应该只看到as2i8dw提交,而其他十个都看不到。

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

于 2015-07-26T11:03:53.977 回答
1

问题是所有压缩的提交仍然存在

如果这些提交仍然可以通过任何其他引用(其他分支或标签)访问,那么即使在当前分支被重新定位之后,这些提交仍然是可见的。

尝试使用git reset --soft.
如果 HEAD 仍然引用您的 10 次提交:

git reset --soft HEAD~10
git commit -m "squashed 10 commits"
于 2015-07-26T11:00:40.140 回答
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您的远程分支,如果您确信在那里没有添加新的更改。

PS:如果您在远程分支中有任何新更改,最好:

git rebase origin remote_branch 

然后压缩你的提交。

于 2016-04-20T11:35:40.287 回答