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

| 这很好地解释了压缩多个提交: http://git-scm.com/book/en/Git-Branching-Rebasing 但不适用于已推送的提交。如何在本地和远程存储库中压缩最近的几次提交? 编辑:当我执行
git rebase -i origin/master~4 master
时,将第一个保留为
pick
,将其他三个保留为
squash
,然后退出(通过emacs中的c-x c-c),我得到:
$ 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个提交中没有一个出现在ѭ5中。我希望编辑器可以重新启动,以便我可以输入提交消息。我究竟做错了什么?     
已邀请:
壁球本地提交
git rebase -i origin/master~4 master
然后用力推
git push origin +master
--force
+
的区别 从ѭ10的文档中:   请注意,
--force
适用于所有推送的参考,因此使用   将
push.default
设置为
matching
或多按   配置为“ 14”的目的地可能会覆盖其他引用   比当前分支(包括严格落后于本地引用)   他们的远程对应对象)。要强制只推一个分支,请使用ѭ9   在refspec前面推动(例如
git push origin +master
强制   推送至
master
分支)。     
在分支上,我能够做到这一点(对于最后4次提交)
git checkout my_branch
git reset --soft HEAD~4
git commit
git push --force origin my_branch
    
与接受的答案略有不同,但是我在挤压时遇到了很多困难,终于得到了。
$ git rebase -i HEAD~4
在打开的交互式屏幕上,将壁球替换为壁球 在您要压缩的所有提交的顶部。 通过ѭ20保存并关闭编辑器 使用以下方法推送到遥控器:
$ git push origin branch-name --force
    
只需创建一个
branch
即可工作,而不使用
master
可以避免很多问题:
git checkout -b mybranch
以下已完成
remote
提交的作品和&25ѭ提交/ / 27 /的混合作品:
# 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
您将打开编辑器vm,并使用msgs这样的操作
Pick 2994283490 commit msg1
f 7994283490 commit msg2
f 4654283490 commit msg3
f 5694283490 commit msg4
#Some message 
#
#some more
在这里,我将所有其他提交更改为\“ f \”(用于修正的立场)。
git push -f origin feature/feature-branch-name-xyz
这会将所有提交固定为一个提交,并删除所有其他提交。 我做到了,这对我有帮助。     
当您使用Gitlab或Github进行操作时,您可能会遇到这种麻烦。您可以使用上述方法之一来压缩提交。我最喜欢的是:
git rebase -i HEAD~4
or
git rebase -i origin/master
选择壁球或修正来提交。此时,您将使用git status进行检查。消息可能是:
    On branch ABC-1916-remote
    Your branch and \'origin/ABC-1916\' have diverged,
    and have 1 and 7 different commits each, respectively.
      (use \"git pull\" to merge the remote branch into yours)
而且您可能很想拉它。请勿这样做,否则您将处于与以前相同的情况。 而是使用以下方法推到您的起源:
git push origin +ABC-1916-remote:ABC-1916
+允许仅强制推送到一个分支。     
要压缩两个提交(其中一个已经被推送)在单个分支上,可以进行以下工作:
git rebase -i HEAD~2
    [ pick     older-commit  ]
    [ squash   newest-commit ]
git push --force
默认情况下,这将包括最新提交的提交消息,作为对旧提交的注释。     
1)git rebase -i HEAD〜4
To elaborate: It works on the current branch; the HEAD~4 means squashing the latest four commits; interactive mode (-i)
2)这时,编辑器打开,并带有提交列表,以更改第二个及之后的提交,用南瓜替换pick然后保存。 输出:成功地重新建立了基准并更新了refs / heads / branch-name。 3)git push origin refs / heads / branch-name --force 输出: ... 远程: 远程:要为分支名称创建合并请求,请访问: 远程:http:// xxx / sc / server / merge_requests / new?merge_request%5Bsource_branch%5D = sss 远程:到ip:sc / server.git  + 84b4b60 ... 5045693分支名称->分支名称(强制更新)     

要回复问题请先登录注册