合併分支時,通常會收到命令提示符中列出的合併衝突。我知道如何通過查看有衝突的文件並進行適當的更改來解決問題。我們也有「mergetool」,它可以是非常有用的(雖然不是很好使用它)。從我從不同的來源讀取您解決這項問題的步驟是:如何檢查git merge問題是否已修復?
- 修復衝突
- 添加
- 推
這看起來很簡單。但是如果我錯過了一些東西而不去修復它呢?除了使用mergetool之外,Git是否提供了一種檢查是否還有其他要修復的方法?
合併分支時,通常會收到命令提示符中列出的合併衝突。我知道如何通過查看有衝突的文件並進行適當的更改來解決問題。我們也有「mergetool」,它可以是非常有用的(雖然不是很好使用它)。從我從不同的來源讀取您解決這項問題的步驟是:如何檢查git merge問題是否已修復?
這看起來很簡單。但是如果我錯過了一些東西而不去修復它呢?除了使用mergetool之外,Git是否提供了一種檢查是否還有其他要修復的方法?
務必:
git diff -S "<<<<<<< HEAD" -S "=======" -S ">>>>>>> $(git name-rev --name-only MERGE_HEAD)" HEAD
這個worktree的內容與HEAD
比較,但只顯示,如果一個或一個以上三種類型合併商標的被包含在任何輸出更改。
例如,如果你從一個分支合併稱爲develop
,一個未合併的文件可能是這樣的:
public void fooTheBar(Bar input) {
<<<<<<< HEAD
if (input == null) {
throw new Exception("input cannot be null!");
}
=======
Console.WriteLine("preparing to foo the bar");
>>>>>>> develop
input.foo();
}
因此,要確保所有文件已被合併,你需要尋找以下任何三行:
<<<<<<< HEAD
=======
>>>>>>> develop
而這就是命令中-S
參數的作用。因爲它不會永遠是develop
,我們使用命令:
git name-rev --name-only MERGE_HEAD
讓您合併到當前分支的分支的名稱。
(你也許可以搜索只是那些線之一,但搜索所有三是更加強勁,並會告訴你在哪裏,例如你忘了只是刪除線的一個案例。)
由於命令將工作樹與HEAD
進行比較,而不僅僅是對分階段更改,即使您有git add
ed仍包含衝突的文件,此工作也會起作用。
我認爲這個問題暗指的是 - 開發人員如何知道所有手動合併都已完成?例如,你可能會遇到一個簡單的合併,像這樣:
git checkout master
git merge dev
,然後你會得到:
CONFLICT blah blah
CONFLICT blah blah
CONFLICT blah blah
有時還會有更多的衝突比你可以指望,(當你是不負責任)。
我做的是解決所有手動合併,我可以找到,然後我做「< < < < <」和「>>>>>」字符代碼庫序列進行全局搜索。似乎在過去爲我工作得很好。如果您沒有任何這些字符串,那麼很可能您已經處理了需要照顧的所有手動合併。只要你不使用git merge
的-Xtheirs
和-Xours
選項,那麼你可以相信你已經成功地合併了代碼,這是你自己的條件。
在添加文件之前,請確保在文件中找不到任何'===='。您可以輕鬆地在命令提示符下用vim實現這一目標:
vim yourFile
/====
Enter
如果你發現什麼都沒有,那麼你是好它添加!
希望它可以幫助
你的意思是不是固定的?如果仍然存在衝突,你的意思是?如果您能夠完成合並,衝突必須已解決。 – dave
一旦你添加並提交一個合併,你告訴Git你沒有更多的改變。如果你錯過了什麼,那就是你的問題。修復它並重新提交或'--amend'您的合併提交。 –
可能重複的[如何解決合併衝突在Git?](http://stackoverflow.com/questions/161813/how-to-resolve-merge-conflicts-in-git) –