三种情况
一、同一分支
场景:同一分支,多人开发,未pull,直接add/commit/push,无法push的场景。
原因:未pull,在自己push之前,远程已经有人push过了,此时本地与远程的版本基础是不一致的(本地HEAD指向别人未提交之前的点,而远程已经有人提交过,HEAD已经往后移了,并不一致)
处理:先pull,把远程的更改拉到本地,再次push,即可解决。
缺点:提交会出现分叉(不美观),因为本地的HEAD并没有改变的,只是git自动执行了merge。
优化:
git rebase
原理:将本地HEAD的指向与远程调整一致(本地HEAD,指向别人提交之后),再次提交就不会出现merge的情况。
推荐处理:
git pull --rebase
二、不同分支
场景:开发分支dev合并到主分支master
现象:在dev开发新功能,但是master分支有人提交过(例如:线上bug处理),此时dev合并到master,会出现merge的分叉。
原因:两个分支,最开始的起点是一致的,但是各自都有新的提交(HEAD不一致了),就会出现分叉(强行合并是可以的,如果你不在乎美观的话)
处理:
git checkout master
git pull // 拉取最新master
git checkout dev
git rebase master
git checkout master
git merge feature
git push
说明:提取dev分支的所有提交,将dev分支的HEAD移动到master分支的最新提交处,然后再执行merge操作,此时不会出现分叉。
特殊情况处理:在 git rebase master过程中出现了冲突怎么办?
- 手动处理冲突
- git add <解决冲突后的文件>
- git rebase --continue
三、不同分支,但master为保护分支
场景:此时ev分支不可以直接合并到master,必须走pr才能合并
处理:
git checkout master
git pull // 拉取最新master
git checkout dev
git rebase master // 至此,跟第二部是一样的
git push -f
// 最后在远程提pr,合并即可
网友评论