Gerrit中如何同步amend后的提交到已cherry pick它的分支
最优同步操作步骤
这个场景核心要避免生成重复提交、冲掉同事后续的自有改动,全程在同事本地分支操作即可,不需要你这边做额外特殊处理,你只需要把amend后生成的新提交A'的hash、以及你提交所在的分支名同步给同事就行。
同事侧操作流程:
- 操作前先检查本地工作区,如果有未提交的临时改动,先执行
git stash暂存,避免中途被冲突打断丢代码。 - 先定位自己之前cherry-pick生成的提交
B的hash值,执行交互式变基删除旧的B提交:
执行命令git rebase -i B^,在弹出的提交列表编辑页里,找到B对应的那一行,把行首的pick改成drop,保存退出等待变基完成即可。 - 拉取你所在分支的最新代码到本地:
git fetch origin 你提交A所在的远程分支名 - 把你更新后的新提交拣选到当前分支:
git cherry-pick A'的完整hash值 - 如果出现代码冲突,正常手动解决冲突后,执行
git add 冲突文件路径,再执行git cherry-pick --continue就完成了新提交的同步。 - 如果最开始暂存了本地临时改动,执行
git stash pop恢复即可。
特殊简化场景
如果同事在生成提交B之后,没有在B之上提交任何自己的新代码,可以跳过rebase步骤,直接执行:git reset --hard B^
后续直接按上面的步骤cherry-pick新的A'即可,操作更快。
注意避坑
- 不要直接跨分支merge:会把amend前的
A、amend后的A'、同事生成的B三个重复改动的提交都留在提交历史里,平白增加后续合并主分支的冲突概率,历史记录也会非常乱。 - 不要直接硬重置到你的提交:会直接抹掉同事在
B之后写的所有自有代码,风险极高。 - 如果同事之前已经把带
B提交的分支推到了自己的远程分支,同步完新提交后需要执行git push --force-with-lease推送更新,不要用裸--force参数,避免误覆盖其他协作者同时推到该分支的改动。
内容的提问来源于stack exchange,提问作者Appaji Chintimi
相关产品推荐
相关产品推荐

