IntelliJ IDEA 2024.1 ヘルプ

Git の競合を解決する

チームで作業しているときに、現在作業中のファイルに誰かが変更をプッシュするという状況に遭遇する可能性があります。これらの変更が重複しない場合(つまり、異なるコード行に変更が加えられた場合)、競合するファイルは自動的にマージされます。しかし、同じ行が影響を受けた場合、Git は無作為に一方を他方を選ぶことはできず、衝突を解決するように求めます。

Git では、プルマージリベースチェリーピック変更のスタッシュ解除、またはパッチの適用のいずれかの操作を実行しようとすると、競合が発生する可能性があります。競合がある場合、これらの操作は失敗し、アップストリームバージョンを受け入れるか、バージョンを優先するか、変更をマージするように求められます。

Files Merged with Conflicts dialog

競合ダイアログは、Git レベルで競合が検出されると自動的にトリガーされます。

このダイアログで閉じるをクリックするか、コマンドラインからマージ競合につながる Git 操作を呼び出すと、コミットツールウィンドウの変更ビューに、解決するためのリンクを含むマージの競合ノードが表示されます。

The Merge Conflicts node in the Local Changes view

IntelliJ IDEA は、ローカルで競合を解決するためのツールを提供します。このツールは 3 つのペインで構成されています。

  • 左側のペインには、読み取り専用のローカルコピーが表示されます

  • 右ペインには、リポジトリにチェックインされた読み取り専用バージョンが表示されます。

  • 中央のペインは完全に機能するエディターであり、競合の解決結果が表示されます。最初は、このペインの内容はファイルのベースリビジョンと同じです。つまり、競合する両方のバージョンの派生元のリビジョンです。

color coding in the conflict resolution tool
  1. 変更行

  2. 削除された行

  3. 新しく追加された行

  4. 矛盾する行

競合の解決

  1. 競合ダイアログのマージローカルの変更ビューの解決リンクをクリックするか、エディターで競合するファイルを選択し、メインメニューから VCS | Git | 競合の解決を選択します。

  2. 競合しないすべての変更を自動的にマージするには、ツールバーの the Apply Non-Conflicting Changes button ( 競合しないすべての変更を適用 ) をクリックします。 the Apply Non-Conflicting Changes from the Left button ( 競合しない変更を左側から適用 ) と the Apply Non-Conflicting Changes from the Right button ( 競合しない変更を右側から適用 ) を使用して、それぞれダイアログの左側 / 右側部分からの競合しない変更をマージすることもできます。

  3. 競合を解決するには、左 (ローカル) バージョンと右 (リポジトリ) バージョンに適用するアクション (the Accept button を受け入れるか the Ignore button を無視する) を選択し、結果のコードを中央ペインで確認する必要があります。

    Resolve conflicts

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

    the context menu of a conflicting change

    単純な競合(たとえば、同じ行の最初と最後が異なるファイルリビジョンで変更されている場合)では、ワンクリックで変更をマージできる単純な競合を解決 the Resolve simple conflicts button ボタンが使用可能になります。

    the Resolve Simple Conflicts button

    このような競合は、競合しないすべての変更を適用アクションでは解決されません。なぜなら、それらが適切に解決されていることを確認する必要があるからです。

  4. 競合を解決するために、異なるバージョンを比較することも有用な場合があります。the Compare contents button ツールバーボタンを使用して、オプションのリストを呼び出します。ベースは、ローカルバージョンとリポジトリバージョンが由来するファイルバージョン(最初は中央のペインに表示されます)を参照し、垂直方向の中央は結果バージョンを参照します。

  5. 中央パネルでマージ結果を確認し、適用をクリックします。

生産性のヒント

競合しない変更を自動的に適用します

IntelliJ IDEA は、マージダイアログから変更を適用するように指示する代わりに、常に競合しない変更を自動的に適用するように設定できます。これを行うには、設定 Ctrl+Alt+Sツール | 差分 & マージページで競合しない変更を自動的に適用オプションを選択します。

中央ペインで変更を管理する

中央ペインでの変更は、ガター内の変更マーカーの上にマウスを移動してクリックすると表示されるツールバーを使用して管理できます。ツールバーは、変更された行の前の内容を示すフレームとともに表示されます。

the change toolbar

例: 競合しない変更が複数あり、そのうちの 1 つまたは 2 つだけをスキップする必要がある場合、競合しないすべての変更を適用アクションを使用してすべての変更を同時に適用し、このツールバーの前回保存した状態に戻すアクションを使用して不要な変更を元に戻す方が簡単です。

LF および CRLF の行末に関連する競合の処理

多くの場合、チームで作業し、同じリポジトリに貢献している人々が異なるオペレーティングシステムを使用しています。Unix、Linux、macOS は LF を使用し、Windows は CRLF を使用して行末をマークするため、これにより行末の問題が発生する可能性があります。

IntelliJ IDEA は差分ビューアーの行末の不一致を表示するため、手動で修正できます。Git でこのような競合を自動的に解決したい場合は、Windows では core.autocrlf 属性を true に設定し、Linux および macOS では input に設定する必要があります (詳細については、行末の処理(英語)を参照してください)。Windows では git config --global core.autocrlf true を実行するか、Linux および macOS では git config --global core.autocrlf input を実行して、構成を手動で変更できます。

ただし、IntelliJ IDEA は自動的に設定を分析し、CRLF をリモートリポジトリにコミットしようとしている場合は警告し、オペレーティングシステムに応じて core.autocrlf 設定を true または input に設定することをお勧めします。

LF および CRLF 改行コード文字のスマート処理を有効にするには、設定ダイアログ Ctrl+Alt+S を開き、左側のバージョン管理 | Git ノードを選択します。CRLF 改行コードがコミットされる前に警告するオプションを有効にします。

このオプションを有効にすると、CRLF 区切り文字を使用してファイルをコミットしようとするたびに、影響を受けるファイルで関連する Git の属性(英語)を設定していない限り、IntelliJ IDEA は改行コードに関する警告ダイアログを表示します(この場合、IntelliJ IDEA は自分のしていることを明確に理解していると仮定し、このファイルを分析から除外します)。

改行コードに関する警告ダイアログで、次のいずれかをクリックします。

  • そのままコミットは警告を無視し、CRLF セパレータでファイルをコミットします。

  • 修正してコミットを使用して、オペレーティングシステムに応じて true または inputcore.autocrlf 属性を設定します。その結果、コミット前に CRLF 改行コード文字が LF に置き換えられます。

マージ中に競合がどのように正確に解決されたかを後で確認する必要がある場合は、Git ツールウィンドウ Alt+9ログタブで必要なマージコミットを見つけ、右側のコミットの詳細ペインで競合のあるファイルを選択します。をクリックし、「 the Show diff icon 」をクリックするか、「Ctrl+D」を押します。詳細については、「変更がどのようにマージされたかを確認する」を参照してください。

マージの競合を解決する方法の詳細については、このビデオを参照してください。

関連ページ:

リモート Git リポジトリと同期する (フェッチ、プル、更新)

変更をアップストリームにプッシュして作業結果を共有する前に、リモートリポジトリと同期して、プロジェクトのローカルコピーが最新であることを確認する必要があります。これを行うには、次のいずれかの方法があります: 変更のフェッチ、変更のプル、プロジェクトの更新 Git ブランチポップアップは、ブランチにまだフェッチされていない受信コミットがあるかどうかを示します。変更のフェッチ:アップストリームから変更をフェッチすると、リモートリポジトリと最後に同期してから行われたコミットからのすべての新しいデータがロー...

変更を適用するには、マージ、リベース、チェリーピックを行います。| IntelliJ IDEA ドキュメント

Git では、あるブランチから別のブランチへの変更を統合するいくつかの方法があります。ブランチのマージ、ブランチのリベース、チェリーピックの個別コミット、コミットから個別の変更を適用する、特定のファイルをブランチに適用する、ブランチのマージ:特定のタスクを実行するために機能ブランチを作成し、機能を完了してテストした後、作業結果をメインコードベースに統合するとします。これを行う最も一般的な方法は、ブランチをマスターにマージすることです。機能ブランチで作業をしている間、チームメイトが master...

シェルブまたはスタッシュの変更

場合によっては、未完了のままのタスクを切り替えて、元に戻る必要があることがあります。作業内容を失うことなく複数の異なる機能に取り組むには、保留中の変更をシェルブまたはスタッシュすることができます。Shelve 対スタッシュ:スタッシュの変更はシェルブ付けと非常に似ています。スタッシュは Git によって生成され、IntelliJ IDEA 内または IntelliJ IDEA 外から適用できます。保留された変更を含むパッチは IntelliJ IDEA によって生成され、IDE を通じて適用さ...

パッチを使う

ローカルの変更をコミットする代わりに、変更を .patch ファイルに入れて、後でソースに適用したり、メールで送信したりすることができます。パッチを使用すると、Git リポジトリで変更をチェックインせずに共有するのに便利なメカニズムになります。コミットされていない変更からパッチを作成するローカルの変更ビューで、パッチに含めるファイルまたは変更リストを選択し、コンテキストメニューからローカル変更からパッチを作成を選択します。コミットする変更を選択することもできます。コミットボタンの横にある矢印をクリッ...

Git リポジトリの変更を調査する

IntelliJ IDEA では、プロジェクト内のすべての変更を追跡できます。これにより、変更の作成者を特定し、ファイルバージョンまたはコミットの違いを確認し、必要に応じて変更を安全にロールバックして元に戻すことができます。プロジェクト履歴を確認する:指定したフィルターに一致するプロジェクトソースに加えられたすべての変更を確認できます。プロジェクト履歴を表示するには、Git ツールウィンドウのログタブを開きます。すべてのブランチおよびリモートリポジトリにコミットされたすべての変更が表示されます...

変更を変更リストにグループ化する

変更リストは、VCS リポジトリにまだコミットされていないローカル変更のセットです。変更リストを使用すると、さまざまなタスクに関連する変更をグループ化し、これらの変更セットを個別にコミットできます。詳細については、変更をローカルでコミットするを参照してください。変更リストは変更ビューに表示されます。最初は、変更というデフォルトの変更リストが 1 つあります。新しい変更はすべて、変更変更リストに自動的に配置されます。VCS にまだ追加されていない新しく作成されたファイルをグループ化するバージョン管...