1. git cherry-pick與git rebase
進行兩個獨立分支的**合併時有兩個比較常用的命令,分別是git cherry-pick和git rebase。
cherry-pick主要可以用於拷貝某個單獨的patch,它的靈活性更大,而rebase主要用於整個分支的一次性合併。git rebase的使用語法為:
git rebase
執行上述命令的過程為:
切換到to-branch分支;
將to-branch中比upstream-branch多的commit先撤銷掉,並將這些commit放在一塊臨時儲存區(.git/rebase);
將upstream-branch中比to-branch多的commit應用到to-branch上,此刻to-branch和upstream-branch的**狀態一致;
將存放的臨時儲存區的commit重新應用到to-branch上;
結束。執行完上述第3步後,to-branch的**狀態已經改變,接著執行第4步時則可能會產生合併衝突。
2. 合併衝突的解決辦法
解決合併衝突幾個常見的辦法是:
手動編輯衝突檔案,手動刪除或者保留衝突的**;
對於「both added」、「both deleted」、「both modified」等型別的衝突,若想完整地保留某一方的修改可以執行git checkout --ours(或者--theirs) 《檔名》來選擇想要保留的版本。需要注意的是由於git rebase 是先撤銷再應用commit,所以這裡的ours指的是upstream-branch,theirs指的是我們將要應用的臨時commit。
對於「added by us/them」、「deleted by us/them」等型別的衝突需要使用git rm 和git add 來刪除/新增file。在此過程中需要特別注意誰是us,誰是them。
衝突解決完之後,使用git add 來標記衝突已解決,最後執行git rebase --continue繼續。如果中間遇到某個補丁不需要應用,可以用下面命令忽略:
git rebase --skip
如果想回到rebase執行之前的狀態,可以執行:
git rebase --abort
利用git rebase解決衝突備忘
repo sync d 從遠端倉庫拉取最新 git checkout b 檢出臨時分支,供rebase使用 git checkout support beeper 切換到你發生衝突的分支 git rebase 將遠端倉庫的 同步到發生衝突的分支 此時順利的話,可以合併,但極有可能發生合併衝突 發生衝...
git常見衝突及解決辦法
1.內容衝突 產生衝突的原因 兩個使用者修改了同乙個檔案的同一塊區域,git會報告內容衝突。我們常見的都是這種。解決衝突的辦法 編輯衝突檔案,修改衝突。例如 衝突檔案test.c test.c發生衝突後的內容如下 include include head wide character strlen ...
滑動衝突 常見情形及解決方案
安卓開發過程中滑動衝突的情形主要有2類 滑動衝突解決策略的理論基礎為安卓的 事件分發機制,針對滑動衝突的解決策略有以下兩種 建議採用第一種方法,易於理解,不容易出錯。實際測試後發現 原生根本就不會產生滑動衝突!1 左右滑動 viewpager處理觸控事件 此後所有的 action move acti...