IntelliJ IDEA 2020.2 Help

1つのGit ブランチから別のGitに変更を適用する

Gitでは、あるブランチから別のブランチへの変更を統合する方法がいくつかあります。

ブランチのマージ

特定のタスクで機能する機能ブランチを作成し、機能を完了してテストした後、作業の結果をメインコードベースに統合するとします。

feature branch diagram

ブランチをマスターにマージがこれを行うための最も一般的な方法です。

機能ブランチで作業をしている間、チームメイトがmasterに作業をコミットし続けることはよくあることです。

feature branch diverged from master

mergeを実行すると、機能ブランチからの変更がターゲットブランチのHEADに統合されます。

merge result

Gitは、2つのブランチが分岐したポイントからあなたのフィーチャブランチとマスターからの変更を組み合わせたマージコミットと呼ばれる新しいコミット(M)を作成します。

ブランチのマージ

  1. ブランチポップアップまたはGitツールウィンドウのブランチペインで、変更を統合するターゲットブランチを選択し、コンテキストメニューからチェックアウトを選択してそのブランチに切り替えます。

  2. 以下のいずれか 1 つを実行します:

    • マージのオプションを指定する必要がない場合は、現在のブランチにマージするブランチを選択し、サブメニューから現在にマージするを選択します。

    • マージオプションを指定する必要がある場合は、メインメニューからVCS Git | 変更をマージを選択してマージダイアログを開きます。

      The Merge dialog

      現在のブランチにマージするブランチを選択し、オプションの変更をクリックして、以下から選択します。

      • --no-ff : マージが早送りとして解決できたとしても、マージコミットはすべての場合に作成されます。

      • --ff-only : マージは、早送りが可能な場合にのみ解決されます。

      • --squash : すべてのプルされた変更を含む単一のコミットは、現在のブランチの上に作成されます。

      • -m : マージコミットのメッセージを編集できます。

      • --no-commit : マージは実行されますが、マージコミットは作成されないため、コミットする前にマージの結果をインスペクションできます。

    マージをクリックします。

作業ツリーがクリーンで(コミットされていない変更がないことを意味します)、フィーチャブランチとターゲットブランチの間に競合が発生しない場合、Gitは2つのブランチをマージし、マージコミットがGitツールのログタブに表示されます。ウィンドウ Alt+9

merge commit

ブランチとターゲットブランチの間で競合が発生した場合は、解決するように指示されます(競合の解決を参照)。マージ後に未解決の競合が残っている場合は、競合をマージするノードが解決するためのリンクとともにローカルの変更ビューの対応する変更リストに表示されます。

マージによって上書きされるローカルの変更がある場合、IntelliJ IDEAはスマート・マージの実行を提案します。このオプションを選択すると、IntelliJ IDEAはコミットされていない変更をスタッシュし、マージを実行してから、変更をスタッシュ解除します。

ブランチのリベース (git-rebase)

ブランチを別のブランチに rebase するとき、最初のブランチからのコミットを2番目のブランチのHEADコミットの上に適用します。

特定のタスクを処理し、そのブランチに対していくつかのコミットを行う機能ブランチを作成したとします。

featuer branch

ブランチで開発している間、あなたのチームメートは自分の作業を習得し続けます:

feature branch diverged from master

rebase 操作を実行すると、masterの現行のHEADコミットの上にコミットを適用することによって、機能ブランチで行った変更を master ブランチに統合できます。

rebase operation result

ブランチを別のブランチの上にリベースする

  1. メインメニューからVCS | Git | リベースを選択します。

    Git rebase dialog
  2. リストから、現在のブランチをリベースするターゲットブランチを選択します。

    Choose target branch in the Git rebase dialog

  3. ブランチ全体をリベースするのではなく、特定のコミットからソースブランチをリベースする必要がある場合は、オプションを変更するをクリックして--ontoを選択します。ソースブランチフィールドに、現在のブランチを新しいベースに適用する開始点となるコミットのハッシュを入力します。
    Specify commit hash with --onto
  4. リベースするブランチが現在チェックアウトされていない場合は、オプションを変更するリベースする別のブランチを選択の順にクリックし、表示されるリストからブランチを選択します。

    Choose the branch you want to rebase

    IntelliJ IDEAは、リベース操作を開始する前に、このブランチをチェックアウトします。

  5. ブランチ履歴に保持するためにリコミット中にマージコミットを保持する場合は、オプションを変更するをクリックして--preserve-mergesを選択します(このオプションは interactive リベースでは使用できません)。

  6. リベースをクリックします。

リベースのオプションを指定する必要がない場合は、リベースダイアログを呼び出さずにリベースを開始できます。ブランチポップアップまたはGitツールウィンドウのブランチペインでブランチを選択し、次のいずれかのアクションを選択します。

  • カレントを選択基準に再調整するは、選択されたブランチの上に現在チェックアウトされているブランチをリベースします。

  • チェックアウトして現在のものに戻すは、選択したブランチをチェックアウトし、現在チェックアウトされているブランチの上にリベースします。

リベース中にコミットをスキップまたはスキッシュする方法の詳細については、対話的なリベースを実行してプロジェクト履歴を編集するを参照してください。

Gitツールウィンドウ Alt+9ログタブにマージまたはリベース操作がどのように反映されるかを確認するには、このビデオを参照してください。


チェリーピックの個別のコミット

ブランチ全体をリベースまたはマージするのではなく、別のブランチに単一のコミットを適用するだけでよい場合があります。これは、たとえば機能ブランチで作業していて、2つのブランチが分岐した後にコミットされたマスターからの修正プログラムを統合する場合に便利です。または、修正を以前のリリースのブランチにバックポートすることもできます。そのためには、チェリーピックアクションを使用します。

チェリーピック操作のステータスがステータスバーに表示されます。Git ブランチポップアップでチェリーピックを中止を選択すると、進行中のチェリーピックをいつでも中止できます。

Cherry pick operation status

他のブランチにコミットを適用する

  1. ブランチポップアップで、変更を統合したいターゲットブランチを選択し、ポップアップメニューからチェックアウトを選択してそのブランチに切り替えます。

  2. Gitツールウィンドウ Alt+9 を開き、ログタブに切り替えます。

  3. チェリーピックする変更を含むコミットを探します。

    ブランチ、ユーザー、または日付でコミットをフィルターできます。ツールバーの eye icon をクリックし、強調表示 | 未選択のコミットボタン Non-Picked Commits を選択して、現在のブランチに既に適用されているコミットをグレーアウトすることもできます。コミットハッシュがわかっている場合、またはタグ付きコミットを探している場合は、ハッシュ/ ブランチ /タグに移動アクションを使用することもできます(Gitツールウィンドウ Alt+9ログタブで Ctrl+F を押すか、ツールバーの Search をクリックします)。

  4. 必要なコミットを選択してください。コミット詳細エリアの情報を使用して、これらが別のブランチに転送したい変更であることを確認してください。

  5. ツールバーのチェリーピック the Cherry-Pick button をクリックします。IntelliJ IDEAは、自動的に生成されたコミットメッセージとともに変更のコミットダイアログを表示します。変更を確認したり、ターゲットブランチにコミットする前にコードを変更したい場合は、このダイアログから利用可能な差分ビューアーで行うことができます。

  6. 完了したら、コミットをクリックして選択した変更をチェリーピックします。

    キャンセルをクリックすると、ローカルの変更ビューに表示される選択した変更を含む別の変更リストが作成されることに注意してください。これらの変更を確認し、必要に応じて後でコミットできます。

  7. ターゲットブランチへの変更をプッシュします。

個別の変更を適用する

別のブランチに適用するファイルに変更を加えたが、これらの変更は他の変更されたファイルと一緒にコミットされたと想像してください。IntelliJ IDEAでは、コミット全体を選択する代わりに、個別の変更を適用できます。

  1. ブランチポップアップで、変更を統合したいターゲットブランチを選択し、ポップアップメニューからチェックアウトを選択してそのブランチに切り替えます。

  2. Gitツールウィンドウ Alt+9 を開き、ログタブに切り替えます。

  3. 適用したい変更が含まれているコミットを見つけます。

    ブランチ、ユーザー、または日付でコミットをフィルターできます。ツールバーの eye icon をクリックし、強調表示 | 未選択のコミットボタン Non-Picked Commits を選択して、現在のブランチに既に適用されているコミットをグレーアウトすることもできます。コミットハッシュがわかっている場合、またはタグ付きコミットを探している場合は、ハッシュ/ ブランチ /タグに移動アクションを使用することもできます(Gitツールウィンドウ Alt+9ログタブで Ctrl+F を押すか、ツールバーの Search をクリックします)。

  4. 右側のコミット詳細ペインで、ターゲットブランチに適用する変更を含むファイルを選択し、コンテキストメニューから選択された変更を適用を選択します。

  5. 開いたダイアログで、既存の変更リストを選択するか、新しい変更リストの名前を入力してOKをクリックします。

  6. 変更をコミットしてから、ターゲットブランチにプッシュします。

個別のファイルを適用する

単一のファイルに個別の変更を適用することに加えて、ファイルのコンテンツ全体を別のブランチにコピーできます。これは、たとえば、適用するファイルがターゲットブランチに存在しない場合や、複数のコミット内で変更が加えられた場合に便利です。

  1. チェックアウト変更が適用されるブランチ。

  2. ブランチポップアップで、適用するファイルを含むブランチをクリックし、作業ツリーとの差分表示を選択します。

  3. 現在のブランチに適用するファイルを選択し、コンテキストメニューからブランチからを選択します。

  4. 変更をコミットしてプッシュします。IntelliJ IDEAは、ファイルの内容全体を現在のブランチにコピーします。

最終更新日: 2020年7月07日

関連ページ:

Gitを使用して複数の機能を同時に処理する

ときどき、未完成のものを使って別のタスクに切り替えてから、それらに戻る必要があります。IntelliJ IDEAはあなたの作業を失うことなくいくつかの異なる機能に便利に取り組むためのいくつかの方法を提供します:できるスタッシュまたはシェルブ保留中の変更を。スタッシュの変更はシェルブ付けと非常によく似...

Gitの競合を解決する

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

ログタブ

このタブは、バージョン管理にGitまたはMercurialを使用している場合にのみ使用できます。このタブには、すべてのローカルおよびリモート ブランチ、およびすべてのブランチ、または特定の ブランチまたはリポジトリにコミットされたすべての変更が表示されます。カスタムショートカットを割り当てるには、設...

Gitプロジェクト履歴を編集する

Gitを使用すると、プロジェクト履歴を編集できます。これは、機能ブランチで作業していて、他のユーザーと共有する前に、機能をクリーンアップして、希望どおりの外観にする場合に便利です。例:コミットメッセージを編集したり、同じ機能に関連する小さなコミットをつぶしたり、無関係な変更を含むコミットを別のコミッ...

Git ブランチを管理する

Gitでは、分岐は強力なメカニズムであり、たとえば、機能で作業したり、リリースのコードベースの特定の状態を凍結したりする必要がある場合などに、メインの開発ラインから分岐することができます。IntelliJ IDEAでは、ブランチのすべての操作はGit ブランチポップアップで実行されます: これを呼び...