Git revert -m


這其實是個非常簡單的指令,甚至用AS,直接右鍵操作不需要兩秒鍾
但今天使用命令行的方式操作的時候居然發現了點不一樣的地方:
如下我希望revert某個commit,找到了它的id,跑一下命令之后居然發現報錯了,如下

$ git revert d2e4217b332e8bf1

error: commit d2e4217b332e8bf1 is a merge but no -m option was given.
fatal: revert failed

然后看了下help發現,你需要用 -m 指定1或是2:git revert [id] -m [1|2]
為什么呢,不是直接反向執行下這個commit進行的修改嗎,commit加一行revert就減一行嗎?為什么還要選1還是2模式

這正好就觸及到你對git實現原理的本質理解了,git並不是基於diff進行管理的(有這樣的版本管理系統),git的每個commit都是一個當前版本的快照,簡單說每個commit都是一個完整的倉庫版本,所以當你需要revert某個commit的時候,GIT需要知道你到底是希望revert哪個commit與這個commit間的改動

不過其實並沒有那么復雜,你要revert一個commit,就是revert掉這個commit和它上個commit間的改動,所以大部分時候,你直接revert就好了,不用指定-m參數

不過當你要revert的的commit的上面有兩個commit節點的時候,問題就來了

A -> B -> 
            E -> F
C -> D ->

比如這里的E節點,它是AC兩個分支合並的節點,這里假設是你在A分支使用命令merge C,那么E就有兩個上游節點了,當你在新的分支F(其實就是之前的A分支)revert E 時,你就需要加上-m參數了,當你指定1時,就是revert 掉 B到E的改動,當你指定2時,你也可以revert 掉 D到E的改動,其實大部分時候我們都是選1就好了~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM