作者:張東宇 時(shí)間: 2020/7/9
如果你只對(duì)不會(huì)離開(kāi)你電腦的提交執(zhí)行變基,那就不會(huì)有事情。
你開(kāi)始工作的起點(diǎn),克隆下面的倉(cāng)庫(kù)。

遠(yuǎn)程倉(cāng)庫(kù)的初始狀態(tài)
克隆到本地之后,你進(jìn)行了一些修改創(chuàng)建了C3 和 C4。

創(chuàng)建C3 和 C4
現(xiàn)在你對(duì)代碼滿(mǎn)意準(zhǔn)備合并后提交,同時(shí),你想讓你的遠(yuǎn)程倉(cāng)庫(kù)代碼保持一條直線(xiàn),看起來(lái)更美觀(guān)。
其實(shí)我心目中給變基操作有一個(gè)更接地氣的翻譯,嫁接:把某些分支的一部分或全部嫁接到另外一條分支上。達(dá)到精簡(jiǎn)分支結(jié)構(gòu),或是保留有用的代碼,移除無(wú)效代碼的目的。

把exeriment分支的C4 變基到master 分支上
如果只是對(duì)像這樣完完全全的本地生長(zhǎng)出來(lái)的分支進(jìn)行變基合并,不會(huì)翻車(chē)。
如果你對(duì)已經(jīng)推送至共用倉(cāng)庫(kù)的提交上執(zhí)行變基命令,并因此丟失了一些別人開(kāi)發(fā)所基于的提交,那你就有大麻煩了,你的同事也會(huì)因此鄙視你
愉快的一天開(kāi)始了,我是你的同事,你同我一起開(kāi)始工作,一起克隆代碼。

初始的遠(yuǎn)程倉(cāng)庫(kù)
現(xiàn)在是下午三點(diǎn)了,你了看看本地代碼。

你的代碼
又看了看遠(yuǎn)程代碼倉(cāng)庫(kù),發(fā)現(xiàn)張某某已經(jīng)提交了一些代碼。

遠(yuǎn)程倉(cāng)庫(kù)
嗯哼,此時(shí)此刻你決定先合并張某某的代碼, 你git pull,然后又進(jìn)入到了愉快的工作之中...

現(xiàn)在一切還正常
到了三點(diǎn)半張某某粗來(lái)搞事情了,他感覺(jué)自己上次提交沒(méi)有用變基心里不爽,使用變基合并之后強(qiáng)制推送到了遠(yuǎn)程倉(cāng)庫(kù)。
此時(shí)遠(yuǎn)程倉(cāng)庫(kù)發(fā)生了改變,而你的代碼的一部分是基于改變前的遠(yuǎn)程倉(cāng)庫(kù)的。

此時(shí)遠(yuǎn)程倉(cāng)庫(kù)發(fā)生了改變
現(xiàn)在是下午四點(diǎn)半了,你準(zhǔn)備再pull一次后push代碼下班班。

image.png
此時(shí)此刻你發(fā)現(xiàn)多出來(lái)一個(gè)C4‘,而且C4' 又和C7 做了一次合并,出現(xiàn)了C8...
如果此時(shí)此刻你直接向遠(yuǎn)程倉(cāng)庫(kù)推,遠(yuǎn)程倉(cāng)庫(kù)就會(huì)變成和你這樣一樣亂七八糟。此時(shí)此刻,你想的第一件事肯定是鄙視張某某。
如果你對(duì)已經(jīng)推送過(guò)的提交執(zhí)行變基,但別人沒(méi)有基于它的提交,那么也不會(huì)有事。
emmm 這句話(huà)我糾結(jié)了很久,其實(shí)是個(gè)非常簡(jiǎn)單的情況
如果陳某某在張某某第二次push之后合并代碼,就躲過(guò)了一劫。
張某某把舊的代碼結(jié)構(gòu)改變了,破壞了采用先前代碼結(jié)構(gòu)的開(kāi)發(fā)者代碼結(jié)構(gòu)的完整,如果你合并了他舊的代碼結(jié)構(gòu),就會(huì)無(wú)辜中槍?zhuān)绻愫喜⒌氖亲钚碌拇a結(jié)構(gòu),對(duì)你沒(méi)什么影響。