背景:新分支dev,然后其他同事上传master代码,多以master领先dev一个版本,
使用merge会污染commit记录,想要保持一份干净的commit,git rebase就派上用场了
如图,我们在主干master上拉去新的dev分支开发,另外一个团队在主干上修复新的BUG
存在问题:
dev分支是有bug的,直接merge会污染commit(两条线)
解决方案:
我们要进行rebase操作,就是要保证dev版本在最新的mater上开发
也就是要保证commit 123是最新的提交
流程如下:
0、git commit // 提交当前代码 123
1、git checkout master // 切换分支到主干
2、git pull // 拉取最新的代码到本地仓库(主干代码commit ABC)
3、git checkout branchA // 切换回dev分支
4、git reabse master // 进行变基操作 这时候会保证当前代码提交操作123 在ABC上
5、git check master // 切换回master分支
6、git rebase branchA // 把当主干分支同步dev
7、git push // 完活推向仓库
模拟一下操作
第一步,初始化本次仓库,添加文件0.txt
git init
git add 0.txt
git commit
第二步,基于当前master 分支新建dev分支,check out 到dev,并且添加文件123.txt
git branch dev
git checkout dev
git add 123.txt
git commit
git log
看提交日志,这时候dev分支,在master的基础上添加提交了123,这时候已经完成左侧部分操作。
第三步,切换master分支,master添加 ABC.txt
git checkout master
git add ABC.txt
git commit
git log
此时dev 提交记录为 0.txt -> 123.txt
此时master 提交记录为 0.txt -> ABC.txt
第四步,重点来了,开始变基!!!
git checkout dev
git rebase master
git log
第五步,进行主干代码合并
git checkout master
git reabse dev
git log
此时dev 提交记录为 0.txt -> ABC.txt -> 123.txt
此时master 提交记录为 0.txt -> ABC.txt -> 123.txt
(图A)
(图B)
问题得到解决,成功由图A转换到图B,现在dev就可以在无bug版本上继续开发啦!
tag:我是一个现学现卖的程序员