定位和解決git am衝突的方法

【正文】

    在踩過幾次坑之後,大多數工程師都會學會使用patch的形式來保存各個模塊/功能的代碼改動,這樣可以很方便地爲相應模塊添加或者去除相關功能的代碼。但是伴隨着主線代碼的不斷更新,我們在早期保存出來的patch中有部分內容可能已經不能再直接打入現在的代碼裏了。這種情況下可以使用下面的方法解決衝突:

    1、執行命令 git  am xxxx.patch 嘗試直接打入補丁。因爲我們使用的 patch 已經過時了,所以這一步肯定會報錯並中斷(注意,雖然命令停止執行了,但我們依然處於git am命令的運行環境中,可以通過git status命令查看到當前的狀態)。

    2、執行命令 git  apply --reject  xxxx.patch 自動合入 patch 中不衝突的代碼改動,同時保留衝突的部分。這些存在衝突的改動內容會被單獨存儲到目標源文件的相應目錄下,以後綴爲 .rej 的文件進行保存。比如對 ./test/someDeviceDriver.c 文件中的某些行合入代碼改動失敗,則會將這些發生衝突的行數及內容都保存在 ./test/someDeviceDriver.c.rej 文件中。我們可以在執行 git am 命令的目錄下執行 find  -name  *.rej 命令以查看所有存在衝突的源文件位置。

    3、依據 步驟2 中生成的 *.rej 文件內容逐個手動解決衝突,然後刪除這些 *.rej 文件。完成這一步驟的操作後,我們就可以繼續執行 git am 的過程了。

    4、執行命令 git  status 查看當前改動過的以及新增的文件,確保沒有多添加或少添加文件。

    5、執行命令 git  add . 將所有改動都添加到暫存區(注意,關鍵字add後有一個小數點 . 作爲參數,表示當前路徑)。

    6、執行命令 git  am  --resolved 繼續 步驟1 中被中斷的 patch 合入操作。合入完成後,會有提示信息輸出。

    7、執行命令 git  log 確認合入狀態。


    至此,帶有衝突代碼的 patch 合入就操作完成了。如果要修改 commit 信息,執行 git  commit  --amend 命令即可。


【參考資料】

    [1] 《Git am 合併 patch 時的衝突處理》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章