gitで「両方追加」されたマージの競合を解決しますか?


138

私はgitでリベースしていますが、1つの競合が「両方追加」されています。つまり、まったく同じファイル名が自分のブランチとリベースしているブランチに個別に追加されています。 git status教えて:

# 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はどうやって知るのですか?

回答:


139

git rmgit を使用すると、そのパスのすべてのバージョンがインデックスから削除されるため、解決アクションではどちらのバージョンもないままになります。

を使用git checkout --ours src/MyFile.csして、リベースgit checkout --theirs src/MyFile.csするブランチからバージョンを選択するか、リベースするブランチからバージョンを選択できます。

ブレンドが必要な場合は、マージツールを使用するか、手動で編集する必要があります。


1
ありがとう。マージツールが機能しない理由は、gitが.LOCALファイルと.REMOTEファイルを作成するが、.BASEファイルは作成しないためだと気づきました。空の.BASEファイルを作成するだけです。空の.BASEファイルを手動で作成した場合、マージツールは正常に動作します。
Jez

1
@Jez:このスレッドを参照してください。thread.gmane.org/gmane.comp.version-control.git/188776/...
CBベイリー

1
それで、これはgitの最近のバージョンで修正されると言っていますか?
Jez

1
@Jez:それは> = 1.7.9.1 gitのバージョンでだgit.kernel.org/?p=git​​/...
CBベイリー

21
@Tomの回答より:実行中... git checkout --ours someFile git statusを実行しても何も実行されなかったように見える場合があります。 後でこれを行うことを忘れないでください。 git add someFile git status
pec 2015年

72

--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


42

すると...

git checkout --ours someFile

git statusを実行しても何もしなかったように見えるかもしれません。

後でこれを行うことを忘れないでください。

git add someFile
git status
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.