2012-03-22 300 views
97

我在git rebasing,和我得到的一個衝突是'兩個添加' - 也就是說,完全相同的文件名已分別添加到我的分支,並在我分手的分支。 git status告訴我:在git中解決'both added'合併衝突?

# Unmerged paths: 
# (use "git reset HEAD <file>..." to unstage) 
# (use "git add/rm <file>..." as appropriate to mark resolution) 
# 
#  both added:   src/MyFile.cs 

我的問題是,我該如何解決這個問題?我必須使用合併工具,還是有辦法從命令行執行?如果我git rm src/MyFile.cs,git如何知道我想刪除哪個文件版本以及我想保留哪個版本?

回答

97

如果您使用git rm,git會從索引中刪除該路徑的所有版本,所以您的解決方案操作將使您沒有任何版本。

您可以使用git checkout --ours src/MyFile.cs從您要重新綁定的分支中選擇版本,或使用git checkout --theirs src/MyFile.cs從您要分配的分支中選擇版本。

如果您想要混合,您需要使用合併工具或手動編輯它。

+1

謝謝。我剛剛意識到合併工具不工作的原因是因爲git爲合併創建.LOCAL和.REMOTE文件,但不是.BASE文件。我認爲它應該只是創建一個空的.BASE文件。如果您手動創建空的.BASE文件,合併工具正常工作。 – Jez 2012-03-22 14:29:40

+1

@Jez:請參閱此主題:http://thread.gmane.org/gmane.comp.version-control.git/188776/focus=188867 – 2012-03-22 14:57:57

+1

那麼你是說這將在最近版本的git中修復? – Jez 2012-03-22 16:01:37

51

我有時會發現使用--theirs--ours選項來識別文件來自哪裏,這會讓人感到困惑。大多數時候我的礦工將在--theirs提及的分支中。

您還可以使用git checkout <tree-ish> -- src/MyFile.cs

<tree-ish>可以通過分支機構的名稱進行替換或承諾-ID,其中包含你想保留的文件。

git checkout 6a363d8 -- src/MyFile.cs

git checkout my_branch -- src/MyFile.cs

git checkout HEAD -- src/MyFile.cs

26

做當...

git checkout --ours someFile

它可能看起來像它這樣做的git狀態時,什麼也沒做。

只需記住這樣做之後。

git add someFile 
git status