Git の競合を解決する
チームで作業しているときに、現在作業中のファイルに誰かが変更をプッシュするという状況に遭遇する可能性があります。 これらの変更が重複しない場合(つまり、異なるコード行に変更が加えられた場合)、競合するファイルは自動的にマージされます。 しかし、同じ行が影響を受けた場合、Git は無作為に一方を他方を選ぶことはできず、衝突を解決するように求めます。
Git では、 プル、 マージ、 リベース、 チェリーピック、 変更のスタッシュ解除、または パッチの適用のいずれかの操作を実行しようとすると、競合が発生する可能性があります。 競合がある場合、これらの操作は失敗し、アップストリームバージョンを受け入れるか、バージョンを優先するか、変更をマージするように求められます。

競合する ダイアログは、Git レベルで競合が検出されると自動的にトリガーされます。
競合する変更があるファイルごとに、競合するを解決するための 3 つのオプションがあります:
自分の変更内容 を受け入れる:現在チェックアウトしているブランチの変更を保持し、マージ中のブランチの変更を破棄します。
相手の変更内容 を受け入れる:マージ中のブランチの変更を受け入れ、現在チェックアウトしているブランチの変更を破棄します。
各競合するを手動で解決 :各競合するを確認し、どの変更を残すか選択します。
競合する変更があるファイルを double-click すると、CLion で競合するをローカルで解決するためのツールが開きます。 このツールは 3 つのペインで構成されています。
左側のペインには、読み取り専用のローカルコピーが表示されます
右ペインには、リポジトリにチェックインされた読み取り専用バージョンが表示されます。
中央のペインは、競合を解決した結果が表示される、完全な機能を備えたエディターです。 最初は、このペインの内容はファイルの ベースリビジョンと同じであり、つまり両方の競合バージョンが派生したリビジョンです。

変更行
削除された行
新しく追加された行
矛盾する行
競合するの解決方法を実行する
各ファイルの競合するを手動で解決する前に、 競合する ダイアログで 単純な競合をすべて解決 をクリックすると、すべてのファイルの競合していない変更を自動的にマージできます。
競合する変更のマージを始めるには、 競合する ダイアログで競合のあるファイルのいずれかを選択し、 手動で解決 をクリックします。
競合しないすべての変更を自動的にマージするには、ツールバーの
(競合しないすべての変更を適用) をクリックします。
(競合しない変更を左側から適用) と
(競合しない変更を右側から適用) を使用して、それぞれダイアログの左側 / 右側部分からの競合しない変更をマージすることもできます。
競合を解決するには、左 (ローカル) バージョンと右 (リポジトリ) バージョンに適用するアクション (
を受け入れるか
を無視する) を選択し、結果のコードを中央ペインで確認する必要があります。

中央ペインでハイライトされた競合を右クリックし、コンテキストメニューからコマンドを使用することもできます。 左を使用して解決する および 右を使用して解決する コマンドは、それぞれ、一方からの変更を受け入れ、もう一方からの変更を無視するためのショートカットを提供します。

単純な競合(たとえば、同じ行の最初と最後が異なるファイルリビジョンで変更されている場合)では、ワンクリックで変更をマージできる 単純な競合するを解決
ボタンが使用可能になります。
このような競合は、 競合しないすべての変更を適用 アクションでは解決されません。競合が適切に解決されていることを確認する必要があります。
競合を解決するために、異なるバージョンを比較することも有用な場合があります。
ツールバーボタンを使用して、オプションのリストを呼び出します。 ベース は、ローカルバージョンとリポジトリバージョンが由来するファイルバージョン(最初は中央のペインに表示されます)を参照し、 垂直方向の中央 は結果バージョンを参照します。
中央パネルでマージ結果を確認し、 変更の適用 をクリックします。 現在のファイルは閉じられ、次の競合するファイルが開きます。
保存して閉じる をクリックすると、現在のファイルが閉じられ、残りの競合する一覧に戻ります:

マージ結果を元に戻す場合は、 競合する ダイアログでファイルを右クリックし、 競合解決の取り消し を選択します。 ファイルは競合状態に戻ります。
残りの競合するがない場合は、 競合する ダイアログで 承認して終了する オプションが有効化されます。 それをクリックしてマージを完了します。
生産性のヒント
- 競合しない変更を自動的に適用する
CLion は、 マージします ダイアログから指示する代わりに、常に競合しない変更を自動的に適用するように構成できます。 これを行うには、 ツール | diff & マージ 設定ページ Ctrl+Alt+S で 競合しない変更を自動的に適用 オプションを選択してください。
LF および CRLF の行末に関連する競合の処理
多くの場合、チームで作業し、同じリポジトリに貢献する人々は、異なるオペレーティングシステムを使用します。 Unix、Linux、macOS は LF を使用し、Windows は CRLF を使用して行末をマークするため、行末に問題が発生する可能性があります。
CLion は、 差分ビューアー 内で行末の不一致を表示するため、手動で修正できます。 Git でこのような競合を自動的に解決するには、Windows では core.autocrlf 属性を true に設定し、Linux と macOS では 入力 に設定する必要があります (詳細については、 行末の処理(英語)を参照してください)。 Windows では git config --global core.autocrlf true を、Linux と macOS では git config --global core.autocrlf input を実行して、手動で構成を変更できます。
ただし、CLion は自動的に構成を分析し、 CRLF をリモートリポジトリにコミットしようとしている場合は警告し、オペレーティングシステムに応じて core.autocrlf 設定を true または 入力 に設定することを提案します。
LF および CRLF 改行コード文字のスマート処理を有効にするには、 設定 ダイアログ Ctrl+Alt+S を開き、左側の バージョン管理 | Git ノードを選択します。 CRLF 改行コードがコミットされる前に警告する。 オプションを有効にします。
このオプションを有効化すると、 CRLF 区切り文字付きのファイルをコミットしようとするたびに、影響を受けるファイルで関連する Git 属性 を設定していない限り、CLion は 改行コードに関する警告ダイアログ を表示します(この場合、CLion は操作内容を明確に理解していると見なし、このファイルを分析対象から除外します)。
改行コードに関する警告ダイアログ で、次のいずれかをクリックします。
そのままコミット は警告を無視し、
CRLFセパレータでファイルをコミットします。修正してコミット を使用して、オペレーティングシステムに応じて
trueまたは入力にcore.autocrlf属性を設定します。 その結果、コミット前にCRLF改行コード文字がLFに置き換えられます。
後からマージ時に競合がどのように解決されたかを確認したい場合は、 ログ タブの Git ツールウィンドウ Alt+9 で目的のマージコミットを探し、右側の コミットの詳細 ペインで競合のあるファイルを選択し、 をクリックするか Ctrl+D を押してください。 詳細については、 変更がどのようにマージされたかを確認を参照してください。