Git分支合並沖突解決(續)


Git分支合並沖突解決,在使用rebase合並沖突情況下,如果不小心,執行完add后執行了commit,此時本地倉庫HEAD處於游離態(即HEAD指向未知的分支),如何解決?

解決方法 

(1)此時,分支處於 無分支 狀態,創建並切換到新分支(git checkout -b conflict),從而解決HEAD游離狀態;

(2)放棄此次rebase操作(git rebase --abort);

(3)在dev分支上merge新分支,出現沖突(git merge conflict);

(4)沖突修改后提交;

(5)刪除新分支,合並到遠程倉庫。

以上篇文章項目為例

(1)git1在index.html文件中添加“add 2 by git1”,並提交

  

  分支樹如下:

  

  

 

(2)git2同時在index.html文件中添加“add 2 by git2”,並提交

  

  分支樹如下:

  

  

(3)git2從遠程倉庫fetch最新文件,此時狀態如下,dev和origin/dev在不同的分支上

  

  

  執行rebase,發生沖突(之前所有操作都是在dev分支)

  

  沖突后,分支切換到dev|REBASE 1/1,其中1/1表示有一個提交的沖突。git status可以看到dev分支基於origin/dev的最新提交dc6c350進行rebase。

  

   查看分支,發現當前分支為 (no branch, rebasing dev)

  

  分支樹如下,與origin/dev相同:

  

  

(4)為驗證HEAD游離態,git2解決完沖突后,執行提交

  

  

(5)此時,HEAD已處於游離狀態,分支為  無分支

  • 創建並切換新分支conflict,解決游離問題

  

  

  • 丟棄本次rebase操作,分支切回dev

  

  此時dev分支任然為rebase之前的狀態,如下:

  

  • dev分支merge合並conflict分支(該分支解決已之前的沖突),但由於dev保持原貌,合並依然會發生沖突

  

  由於發生沖突,此時分支切換到 dev |MWEGING 。index.html文件如下,說明沖突的在“add 2 by git1”行

  

  • 解決沖突,然后提交,此時自動切換到dev分支

  

  分支樹如下,可以看到HEAD指向了dev最新提交,origin/dev與遠程倉庫一致,conflict分支指向原來沖突修改的分支:

  

  

  • 刪除conflict分支

  

  提交到遠程倉庫,分支樹如下:

  

   

 

 

 總結

  • 解決HEAD指針游離態,並將修改合並到開發分支。
  • rebase除了 --continue外,還有 --skip 和 --abort 操作,其中skip會忽略自己的提交,而更新為遠程倉庫版本;abort會放棄本次合並操作,回到rebase之前的狀態。
  • git reset HEAD <file> ,該命令將文件從暫存區退回到工作區 


免責聲明!

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



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