web-dev-qa-db-ja.com

競合解決をマージする

Gitにマージの競合がある場合、次のようなジャンクが競合するファイルに挿入されます。 3つの質問:

  1. これらの注釈はどのように読みますか?
  2. これらのマージの競合を修正するときに使用する戦略は何ですか?
  3. これらのファイルを読み、2つのバージョンを並べて表示して問題の修正を容易にする方法を知っているMac用のGUIツールはありますか?

enter image description here

注:関連する場合は、GitHubのMac GUIクライアントを使用しています。

56
Chris Calo

現在、Gitがファイルに挿入する意味不明なマーカーを読み取ろうとするよりも優れたソリューションがあります。 Kaleidoscope 2 、Black Pixelのdiffツールの2番目のリリースは、マージツールでもあります。無料ではありませんが、美しく機能します。

Kaleidoscope 2をインストールすると、Gitとの統合が非常に簡単になります。 Kaleidoscopeを開き、メニューバーからKaleidoscope>Integration…を選択します。

Kaleidoscope's Integration menu option.

次に、このウィンドウが表示されます。左のナビゲーションからGitを選択し、ksdiffコマンドラインツールをインストールしてから、Kaleidoscope Gitのデフォルトのdiff and mergeツールを作成します。

Kaleidoscope's Git Integration dialog.

最後に、Gitでマージの競合が発生したら、コマンドラインに移動してgit mergetool。これで、競合が読みやすくなりました。楽しい。

Kaleidoscope sane view for merge conflicts.

21
Chris Calo

<<<<<<======の間のすべては、マージ操作を開始する前のコミット状態であるHEADリビジョンに由来します(ツリーが汚れている場合、git mergeは文句を言います。作業ディレクトリと同等である必要があります)。

======>>>>>>の間の部分は、マージされるバージョンに由来します。 >>>>>>の後のテキストは、競合する変更を導入したコミットのコメントです。

競合マーカーがあるということは、ファイルのこの部分の基本バージョンが両方の「新しい」バージョンと異なることを意味します。基本バージョン(最後の共通の祖先)は表示されません。

より快適にマージしてGUIを使用できるようにする場合は、kdiff3をご覧になることをお勧めします。

35
Simon Richter
<<<< HEAD #Where the conflict starts

#Previous Revision

========== # The point where things look iffy

#Things that changed

>>>>> New Commit # Point where the conflict ends

MacのXcodeにはFileMergeが付属しており、opendiffを使用してコマンドラインからアクセスできます。

git mergetool -t opendiff

16
sparrow

(グラフィカル)マージツールを構成し、そのツールを使用して競合を解決できます。

git mergetoolコマンドもご覧ください-事前定義されたツールのいずれかがインストールされているか、他のツールを構成している場合、解決のためにツールが開きます http://schacon.github .com/git/git-mergetool.html

GUIツールに興味がある場合は、GUIツールを使用すると簡単に解決できるので、表記の意味を心配する必要はありません。 =====および>>>>>でマークされた部分が競合セクションであることを理解してください。

4
manojlds

同じファイルに変更を加えた2つのブランチがあり、それらをマージしようとすると、マージの競合が発生します。競合するファイルのリストを表示するには、ターミナルで_git status_を実行します。

ファイルの競合する行は、視覚インジケータでマークされます:_<<<<<_-この行の後に競合が始まります。 _=====_-HEADおよびmerging_branchからの変更を除けます。_>>>>>_-競合する行の終わり。

_<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch
_

競合するファイルを修正してマージする準備ができたら、_git add_および_git commit_を実行してマージコミットを生成するだけです。コミットが行われたら、_git Push_ブランチへの変更。

参照記事: Git merge

0
Nesha Zoric