这为压缩多个提交提供了很好的解释:
http://git-scm.com/book/en/Git-Branching-Rebasing
但它不适用于已经推送的提交。如何在本地和远程回购中压缩最近的几次提交?
当我执行gitrebase-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是选择提交。现在,4个提交都没有出现在git日志中。我希望我的编辑器重新启动,以便我可以输入一条提交消息。我做错了什么?
1) git rebase-i头~4
详细说明:它适用于当前分支;HEAD~4意味着压缩最近的四次提交;交互模式(-i)
2) 此时,编辑器打开提交列表,以更改第二次和后续提交,将pick替换为squash,然后保存。
输出:已成功重设基准并更新refs/heads/分支名称。
3) git推送原点refs/heads/branch名称--force
输出:
remote:
remote: To create a merge request for branch-name, visit:
remote: http://xxx/sc/server/merge_requests/new?merge_request%5Bsource_branch%5D=sss
remote:To ip:sc/server.git
+ 84b4b60...5045693 branch-name -> branch-name (forced update)
在我的案例中,要求将所有的功能分支提交压缩为一个,以便有一个干净的提交历史。利用GitHub UI实现了这一点。
问题:
功能分支(例如:featureBranch)已从master(一个月前)创建。将所有更改提交给featureBranch(约12次提交,一个月的工作)。并被定期推到远程。
要求:
使用主功能更新功能分支,并在功能分支中进行一次提交
遵循的步骤:
在GitHub UI中从master创建一个新分支(例如:featureBranchLatest)。创建从featureBranch到featureBranchLatest的PR。解决冲突(如果有)。将PR与GitHub UI中的挤压提交选项合并。(更改提交消息以获得更干净的消息)。
现在,featureBranchLatest将具有一次提交所需的所有更改,以及来自主服务器的最新更改。如果不需要参考,请删除旧的分支功能分支。