git rebase

2020-07-17  本文已影响0人  陈大事_code

三种情况

一、同一分支

场景:同一分支,多人开发,未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过程中出现了冲突怎么办?

三、不同分支,但master为保护分支

场景:此时ev分支不可以直接合并到master,必须走pr才能合并

处理:

git checkout master 

git pull    // 拉取最新master

git checkout dev

git rebase master // 至此,跟第二部是一样的

git push -f

// 最后在远程提pr,合并即可
上一篇 下一篇

猜你喜欢

热点阅读