推送后如何在git中压缩提交?

问题描述

壁球在本地提交

git rebase -i origin/master~4 master

然后用力推

git push origin +master

--force和之间的区别+

从以下文档git push

请注意,这--force适用于所有被推送的 refs,因此使用它push.default设置为matching或配置多个推送目标remote.*.push可能会覆盖当前分支以外的 refs(包括严格位于其远程副本之后的本地 refs)。要强制只推送到一个分支,+ 请在 refspec 前面使用 a 来推送(例如git push origin +master,强制推送到master分支)。

解决方法

这很好地解释了压缩多个提交:

http://git-scm.com/book/en/Git-Branching-Rebase

但它不适用于已经推送的提交。如何压缩本地和远程存储库中最近的几次提交?

当我这样做时git rebase -i origin/master~4 master,将第一个保留为pick,将其他三个设置为squash,然后退出(通过 emacs 中的 cx cc ),我得到:

$ git rebase -i origin/master~4 master
# Not currently on any branch.
nothing to commit (working directory clean)

Could not apply 2f40e2c... Revert "issue 4427: bpf device permission change option added"
$ git rebase -i origin/master~4 master
Interactive rebase already started

其中 2f40 是pick提交。现在 4 个提交都没有出现在git log. 我希望我的编辑器会重新启动,以便我可以输入提交消息。我究竟做错了什么?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...