web-dev-qa-db-ja.com

git pull後に競合を解決するにはどうすればよいですか?

git pullの後の競合を解決する必要があります。

$ git pull
CONFLICT (rename/add): Renamed vignette_generator_mashed.h->vision_problem_8.h in 49423dd0d47abe6d839a783b5517bdfd200a202f. vision_problem_8.h added in HEAD
Added as vision_problem_8.h~HEAD_1 instead
Removed vignette_generator_cross_square.cc
Automatic merge failed; fix conflicts and then commit the result.

それで私はそれを少しグーグルで検索し、人々がgit mergetoolを使用して言っているのを見つけました。しかし、ここに私が得たものがあります:

$ git mergetool
merge tool candidates: meld kdiff3 tkdiff xxdiff meld gvimdiff emerge opendiff emerge vimdiff
No files need merging
$ git mergetool opendiff
merge tool candidates: meld kdiff3 tkdiff xxdiff meld gvimdiff emerge opendiff emerge vimdiff
opendiff: file not found

だから、何かをインストールする必要があるということですか?

git pullのバージョンですべてを上書きしたい場合はどうすればよいですか?

51
Tim

これにはmergetoolは必要ありません。手動で簡単に解決できます。

競合は、ローカルコミットがvision_problem_8.hから名前を変更して、リモートコミットも作成したファイルvignette_generator_mashed.hを追加したことです。 ls -l vision_problem_8.h*を実行すると、おそらくgitが保存しているこのファイルの複数のバージョンが表示されます。それらの1つはあなたのものになり、もう1つはリモートバージョンになります。エディターまたは任意のツールを使用して、競合するコンテンツを解決できます。完了したら、git add影響を受けるファイルをコミットし、マージを完了するためにコミットします。

リモートコミットのバージョンを使用したい場合は、書き込まなかったコピーを所定の場所に移動し、git addするだけです。


マージツールについては、git help mergetoolをご覧ください。基本的に、含まれている可能性を見つけるまで実行するか、明示的に構成したものを使用します。

24
Phil Miller

コマンドラインで「-t」スイッチを忘れただけだと思います。 gitヘルプページによると、 "-t、--tool ="の略で、意図したとおりになります。

試してください:

git mergetool -t gvimdiff

もちろん、gvimdiffの代わりに好みのマージツールを使用してもかまいません。meldも素晴らしいです...

6
mano2a0c40

プロジェクトのサブディレクトリからマージを実行すると、gitはプロジェクト全体に対してマージを実行します。ただし、me​​rgetoolは、作業ディレクトリ内またはその下のファイルのみを表示(およびマージ)できます。したがって、このシナリオが発生した場合は、プロジェクトの最上位ディレクトリから競合解決を実行しようとしていることを確認してください。

5
Bluejack

git pullのバージョンですべてを上書きしたい場合はどうなりますか?それだけが必要な場合は、以下を使用する必要があります。

 git fetch
 git reset --hard Origin/your-branch-name
2
saferJo