git rebase 的常見沖突及解決辦法


1. git cherry-pick與git rebase
        進行兩個獨立分支的代碼合並時有兩個比較常用的命令,分別是 git cherry-pick <commit-id>git rebase
        cherry-pick主要可以用於拷貝某個單獨的patch,它的靈活性更大,而rebase主要用於整個分支的一次性合並。git rebase的使用語法為:
git rebase <upstream-branch-name> <to-branch-name>
        執行上述命令的過程為:
  1. 切換到to-branch分支;
  2. 將to-branch中比upstream-branch多的commit先撤銷掉,並將這些commit放在一塊臨時存儲區(.git/rebase);
  3. 將upstream-branch中比to-branch多的commit應用到to-branch上,此刻to-branch和upstream-branch的代碼狀態一致;
  4. 將存放的臨時存儲區的commit重新應用到to-branch上;
  5. 結束。
        執行完上述第3步后,to-branch的代碼狀態已經改變,接着執行第4步時則可能會產生合並沖突。
 
2. 合並沖突的解決辦法
        解決合並沖突幾個常見的辦法是:
  1. 手動編輯沖突文件,手動刪除或者保留沖突的代碼;
  2. 對於“both added”、“both deleted”、“both modified”等類型的沖突,若想完整地保留某一方的修改可以執行git checkout --ours(或者--theirs) <文件名>來選擇想要保留的版本。需要注意的是由於git rebase 是先撤銷再應用commit,所以這里的ours指的是upstream-branch,theirs指的是我們將要應用的臨時commit。
  3. 對於“added by us/them”、“deleted by us/them”等類型的沖突需要使用git rm <file-name>和git add <file-name>來刪除/添加file。在此過程中需要特別注意誰是us,誰是them。
        沖突解決完之后,使用git add <file-name>來標記沖突已解決,最后執行git rebase --continue繼續。如果中間遇到某個補丁不需要應用,可以用下面命令忽略:
git rebase --skip
        如果想回到rebase執行之前的狀態,可以執行:  
git rebase --abort
 


免責聲明!

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



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