git rebase应用场景

24 阅读1分钟

两个人同时开发一个分支, 如图:都修改了内容,会产生如下分支图

git checkout master
git merge master

截屏2024-09-26 16.12.52.png

合并远端分支,你将在本地获得一个崭新的提交H,主要内容是远端分支所有提交内容与你本地分支提交内容的混合大杂烩。 显然,你并不想每次拉取远端内容时都会产生一条“丑陋”的旁路分支,长此以往,你的Git Graph将变的和地铁线路一般的错综复杂。于是,你仅想要“接线头”,将本地开发分支所有提交直接连接在远端分支的提交后面。rebase出马,一马平川。

git pull --rebase 

运行上述命令后,我们得到如下分支图:

截屏2024-09-26 16.16.29.png

直观上看,rebase会粗暴的将C --> F的连接掐断,直接连接在提交E的后面,图中提交F'G'的内容与原提交FG内容是一致的,但commit id却完全不同。即“变基”操作会为原提交分配新的commit id,并将新提交连接在新的变基点上。

当然在rebase过程中并非一帆风顺,rebase会检查新提交F'是否与目前分支上的内容产生冲突,如果出现了冲突,git会暂停变基过程,等待你解决完所有冲突后再继续:

git add . git rebase --continue