git 命令行操作

开发实践:

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与原来的保持一致.

 

posted on 2022-10-02 01:24  万水千山z  阅读(43)  评论(0)    收藏  举报

导航