如何压扁git后提交git?

这给出了压扁多个提交的一个很好的解释:

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

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

编辑:当我做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 。 我希望我的编辑器能够重新启动,以便我可以输入提交消息。 我究竟做错了什么?


南瓜本地承诺

git rebase -i origin/master~4 master

然后用力推

git push origin +master

--force+之间的区别

git push文档:

请注意,-- --force适用于所有推送的引用,因此在push.default设置为matching使用它,或者与使用remote.*.push配置的多个推送目标一起使用remote.*.push push.default可以覆盖除当前分支以外的引用(包括本地引用严格落后于他们的远程对手)。 要强制推送到一个分支,使用refspec前面的+来推送(例如git push origin +master强制推送到master分支)。


在一个分支上,我能够像这样做(最后4次提交)

git checkout my_branch
git reset --soft HEAD~4
git commit
git push --force origin my_branch

只需创建一个branch来处理和处理master ,就可以避免许多问题:

git checkout -b mybranch

以下作品remote提交已推及的混合物remote推送的提交/ local唯一的承诺:

# example merging 4 commits

git checkout mybranch
git rebase -i mybranch~4 mybranch

# at the interactive screen
# choose fixup for commit: 2 / 3 / 4

git push -u origin +mybranch

我也有一些拉动请求说明,这可能会有帮助。

链接地址: http://www.djcxy.com/p/1353.html

上一篇: How to squash commits in git after they have been pushed?

下一篇: How do I properly force a Git push?