在 Git 中合併與強制覆蓋
大多數時候,當我們應用 git push
或 git merge
時,最終會發生一些衝突。在某些情況下,合併衝突的解決方案就像丟棄本地更改或遠端或其他分支更改一樣簡單。
當 Git 無法弄清楚如何合併兩個衝突的更改時,它會建立一個衝突請求。衝突請求是一種描述問題的特殊補丁,它包含衝突更改的雙方(我們的和他們的)以及合併嘗試的結果。
當兩個團隊成員處理相同的檔案並在該檔案中發生衝突時,Git 將衝突應用於我們的工作檔案。然後我們可以編輯生成的檔案,Git 將記錄我們的更改。如果確實發生了衝突更改,Git 會將檔案標記為處於衝突狀態。有幾個命令可以解決該特定分支中的衝突。
當兩個或更多人在同一個倉庫中處理同一個檔案時,衝突最常見。但是,當在檔案中發現衝突時,Git 會非常聰明和聰明地以非常棒的方式解決衝突。Git 使用衝突標記來顯示檔案的哪些部分發生衝突。衝突標記是放置在檔案衝突部分兩側的小雜湊。
拉不單獨使用。它在從遠端伺服器獲取資料的幫助下使用,然後與本地倉庫中的更改應用合併。如果我們願意,可以執行下面提到的這兩個操作。
git fetch
git merge origin/$CURRENT_BRANCH
上面提到的 origin/$CURRENT_BRANCH
的含義如下。
- Git 將應用合併選項並應用來自遠端倉庫的更改,即
origin
。 - 這被新增到
$CURRENT_BRANCH
- 目前在我們本地簽出的分支機構中不存在
git pull
不僅是推薦的,它只是執行 git fetch
後跟 git merge
。我們將進行 3 次合併,通過這些合併,Git 將執行 3 次 fetch 操作,其中一次 fetch 就是我們所需要的。
git fetch origin # it will update all our origin/* remote-tracking branches
git checkout new branch
git merge origin/new branch
git checkout master
git merge origin/master
git merge -X theirs new branch
git push origin master
上面提到的命令將有效地忽略我們要合併的分支上的任何不同更改,並在我們要合併到的分支上開發一個新的提交,所有提交都在該分支上合併。
我們還可以在普通合併中使用 --ours
來合併我們要合併的分支中的所有更改,然後跳過我們要合併到的分支中存在的任何檔案,有效地在兩者之間進行三向合併分支,然後只使用要合併到的分支中的檔案。
我們發現使用 git merge --ours
合併檔案然後使用 git rebase -i
手動重新應用我要合併的分支中的更改要容易得多。
上述命令不適用於有衝突的檔案,但我們發現以下命令可以解決衝突。
git checkout file_with_conflict
git merge --ours --no-commit file_from_branch_with_conflict
git reset --hard git add file_with_conflict git commit -m
Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.
LinkedIn