Git 變基翻車(chē)實(shí)例

作者:張東宇 時(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)什么影響。

如果你的同事干了這種破事,你可以再執(zhí)行一次變基...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容