今天在合并分支的時候碰到了一個問題,情況是這樣的,目前開發分支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