注意:本例中使用Gerrit
进行演示。
- 暂存目前修改的代码
git stash
git stash list # 可以验证暂存是否成功 - 查找到需要指定的
commit
的编号;git log
- 找到
git rebase
编号,即要修改的commit
之前那个commit
;git rebase --interactive a6f372877d26xxx0690aedf6dc6b6e7c
- 找到要更改的
commit
, 将行首的pick
更改为edit
, 保存退出;
本地修改需要修改的代码
恢复暂存的修改
git stash pop
注意:如果此时有冲突,需要自己手动解决冲突
- 解决冲突后,添加修改文件
git add xxx # 文件名称
git commit --amend - 回退到当前状态;
git rebase --continue
注意:如果rebase
版本较多,可能需要多次重复上述步骤,且每rebase
一步,可能都要解决与其他组员commit
的冲突; - rebase 到 master 之后,push 当前版本到远程 ①:此处为你自己需要
git push origin 0d163929c240xxx745b520d07b854c207 ① :refs/changes/8xxx4 ②
amend
的commit
版本号;
②:此处为远端你的change
的编号,如果远端版本已经closed
,则无法进行amend
,只能git reset
;
如果上游提交已经合并并关闭,则参考此处gerrit - Git push remote rejected {change ### closed} - Stack Overflow
需要将之前 rebase 的 commit 信息中的 change-Id 删除,让 Gerrit 重新生成 change-Id ,之后可以继续提交。
到这里以后,git status
后会看到,提示让你git pull
一下,千万不要这样做!否则你会发现这三条白合并了,还平白多了两条 commit
这时候,需要强制 push 上去git push -f
,当然要确保强制 push 不会覆盖了别人的代码,如果这个分支只有你维护那就可以为所欲为了
到此,合并多个远程分支成功~
总结
git
非常智能化,每一次操作应该根据提示进行问题分析、逐步操作则可顺利达到预期效果。