天天看點

Git 分支合并後回退的幾種情況分析

今天在合并分支的時候碰到了一個問題,情況是這樣的,目前開發分支A , 合并了分支B,發現有沖突,于是就去改沖突,改好沖突後commit。但是此時老大提醒說提醒用另一中方法可能更好。于是就想退回去,重新改改試試。其實直接reset就好了。不過一檢視到官網有篇文章是介紹這種情況的,正好就按他說的寫一下。

先說一下幾個Git的基本知識:

Git倉庫有三個主要組成——工作目錄,緩存區和送出曆史。

reset将一個分支的末端指向另一個送出。

checkout 分支切換。

revert撤銷一個送出的同時會建立一個新的送出。

​<code>​git revert​</code>​是個安全的方法。相比​<code>​git reset​</code>​他不會改變現在的送出曆史,是以​<code>​git revert​</code>​可以用在公共分支上,而​<code>​git reset​</code>​最好用在私人分支上。

下面說一下那篇文章介紹的撤銷merge的方法:

reset 到merge之前的commit,然後重新做之後的操作,不過這要求所有的協作者知道如何處理回退的head,如果這不是問題,或者隻是本地分支,這是一個很好的解決方法。方法如下:

簡單暴力,不過很好用。

當 merge 以後還有别的操作和改動時,或者你的協作者在你merge之後又做了一些送出的時候,git 正好也有辦法能撤銷 merge。你可以使用revert指令。方法如下:

這樣會建立新的 commit 來抵消對應的 merge 操作,如果你嘗試再次合并,Git會看到該分支上的送出是在曆史記錄中,并假設你錯誤地嘗試合并你已經有的東西。

這樣就可以正常的merge了,不過這可能會産生更多的沖突。

現在基本上重新介紹了我們以前撤回的分支中的一切。現在如果我們在這個分支上有更多的工作,我們可以重新合并它。

大緻的看完之後,發現後面的方法太麻煩,簡直是沒事找事。不過作者可能完全是基于在公共分支改動的比較複雜的情況,總之,感覺還是在本地分支用reset最友善,或者revert也可以,别整的那個麻煩就行了。

作者:華子dev