场景:多人共用一个分支开发,提交 merge 请求时,需要合并多个提交为一个提交
假设:主分支为:master,对应的远程主分支为:origin/master;你与队友当前开发的分支为:dev,对应的远程分支为:origin/dev。
此时,你与队友所在的 dev 分支上有多次提交(commit)记录,并且已经推送(push)到远程分支(origin/dev);现在,你们的的工作已经完成,需要向远程主分支(origin/master)申请 merge request,并且需要将你们所有的工作提交记录合并为一个提交记录。
做法:
(1) git checkout -b merge_branch
在当前分支 (dev) 新建一个用于提交 merge_request 的分支。
(2) git rebase -i b7b5b77
在本地将 merge_branch 分支变基到 b7b5b77,b7b5b77是远程主分支(origin/master)最后一次提交的 id。
1.显示多次提交日志,从上到下为按时间正序,编辑每行开头的pick:
# p, pick = use commit ,默认,使用提交和提交信息
# r, reword = use commit, but edit the commit message 使用该提交,重新编辑提交信息
# e, edit = use commit, but stop for amending 使用并编辑, 一般不使用
# s, squash = use commit, but meld into previous commit 使用并合并到之前提交,保留编辑信息.不要在第一行使用 **
# f, fixup = like "squash", but discard this commit's log message 使用并合并到之前提交,不保留编辑信息.不要在第一行使用,后续无意义提交合并使用这个选项 **
# x, exec = run command (the rest of the line) using shell 执行其他shell命令
# d, drop = remove commit 删除提交,慎重
2.保存并退出编辑
3.冲突解决(提交有冲突)
(3) git push --set-upstream origin merge_branch 首次将本地新建的 merge_branch 分支推送到远程仓库。
(4) 到远程仓库中向 origin/master 分支提交 merge 请求,选择 origin/merge_branch 分支。
(5) 等待远程主分支同意合并
(6) 远程主分支同意合并之后,删除本地 merge_branch 分支:git branch -d merge_branch。
(7) 对远程分支执行剪枝操作:git remote prune origin