开发实践:
1.在开发中,dev分支提交了4个commit,push到了远程,提了合并master的pr.leader审核打回两个问题commit,需要修改.在本地修改新增了两个commit,现在需要将修改的commit合并到相应的commit中.
当前状态:
已push的四个commit,时间正序,a,b,c,d;
新增的两个commit,b1,d1;
目标:
将commit b,b1合并,d,d1合并,仍是4个commit,a,b,c,d
问题:
由于b,d业务逻辑相关,合并b,b1时有冲突.同时d1亦会与合并后的b冲突.
实际操作:
--fetch
git fetch --all
--备份dev
git checkout -b dev_backup
--根据master创建新的dev_temp分支
git checkout master git checkout -b dev_temp
--在dev_temp上按正序摘取dev分支的a,b,c,d,b1五个commit
git cherry-pick a_hash b_hash c_hash d_hash b1_hash
--合并b,b1两个commit
git rebase -i head~4
此时弹出vi有信息如:
pick b_hash commit_msg pick c_hash commit_msg pick d_hash commit_msg pick b1_hash commit_msg
将其修改为:
pick b_hash commit_msg squash b1_hash commit_msg pick c_hash commit_msg pick d_hash commit_msg
保存时,会提示代码b与b1两个commit代码冲突,解决冲突后
git add . git rebase --continue
此时弹出vi,填写合并b,b1的commit_msg后,保存,rebase成功.b,b1两个commit合并成功.其commit 为 b
--摘取commit d1
git cherry-pick a_hash
此时git提示冲突,两方为合并后的b与d1,解决之.
git add . git cherry-pick --continue
此时摘取d1成功
--合并d,d1两个commit
git rebase -i head~4
vi
pick d_hash commit_msg squash d1_hash commit_msg
无冲突,合并之.
--删除dev分支,将dev_temp更名为dev,变基master,force push,删除dev_temp分支
git checkout master git branch -D dev git checkout dev_temp git branck -m dev git fetch --all git rebase origin/master git push --set-upstream origin dev --force
git branch -D dev_temp
git 操作完成,关闭原有pr,新提pr,git的commit数量和msg与原来的保持一致.
标签:git,hash,--,dev,命令行,commit,msg,操作 From: https://www.cnblogs.com/kplsm123/p/16748155.html