如何压扁后提交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是提交提交。 而现在,4个提交中没有一个出现在git log
。 我希望我的编辑器重新启动,以便我可以input提交信息。 我究竟做错了什么?
南瓜在当地承诺
git rebase -i origin/master~4 master
然后用力推
git push origin +master
--force
和+
之间的区别
从git push
的文档:
请注意,–
--force
适用于所有被推送的ref,因此在push.default
设置为matching
使用它,或者使用configuration了remote.*.push
多个推送目的地remote.*.push
可以覆盖除当前分支以外的ref(包括本地ref严格落后于对方)。 要强制推送到一个分支,使用refspec前面的+
推(例如git push origin +master
强制推送到master
分支)。
在一个分支上,我能够这样做(最后4次提交)
git checkout my_branch git reset --soft HEAD~4 git commit git push --force origin my_branch
只有创build一个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
我也有一些拉请求笔记 ,这可能是有帮助的。
git rebase -i master
你会得到编辑器虚拟打开和消息这样的事情
Pick 2994283490 commit msg1 f 7994283490 commit msg2 f 4654283490 commit msg3 f 5694283490 commit msg4 #Some message # #some more
在这里,我已经改变了所有其他提交到“f”(代表fixup)。
git push -f origin feature/feature-branch-name-xyz
这将修复所有提交到一个提交,并将删除所有其他提交。 我做到了这一点,它帮助了我。