如何压扁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?