AppCode 2023.1 ヘルプ

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

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

ブランチのマージ

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

feature branch diagram

これを行う最も一般的な方法は、ブランチをマスターにマージすることです。

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

feature branch diverged from master

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

merge result

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

ブランチのマージ

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

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

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

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

      The Merge dialog

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

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

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

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

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

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

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

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

merge commit

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

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

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

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

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

feature branch

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

feature branch diverged from master

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

rebase operation result

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

  1. メインメニューから 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

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

  5. ブランチで到達可能なすべてのコミットをリベースする場合は、オプションを変更をクリックして、--root を選択します(このオプションの詳細については、git-rebase(英語) を参照してください)。

  6. 親から何も変更されないコミットである空のコミットを保持する必要がある場合は、オプションを変更をクリックして --keep-empty を選択します(このオプションの詳細については、git-rebase(英語) を参照してください)。

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

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

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

  • リベースを使用して現在にプルイン(リモートブランチの場合)は、選択したブランチから変更をフェッチし、これらの変更に基づいて現在のブランチをリベースします。

  • チェックアウトして現在のブランチでリベース(リモートとローカルブランチの両方)を使用して、選択したブランチをチェックアウトし、現在チェックアウトされているブランチ上にリベースします。リモートブランチがローカルに存在しない場合、AppCode は追跡されたローカルブランチをサイレントに作成し、チェックアウトしてリベースします。

  • 選択したブランチで現在のブランチをリベース(リモートとローカルブランチの両方)は、選択したものの上に現在チェックアウトされているブランチをリベースします。

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

このビデオを見て、リベース操作を実行する方法をよりよく理解してください。

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

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

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

Cherry pick operation status

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

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

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

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

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

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

  5. ツールバーのチェリーピック the Cherry-Pick button をクリックします。AppCode は、ターゲットブランチに変更を適用してコミットします。

  6. チェリーピックが競合で失敗した場合、選択された変更はローカルの変更ビューで確認できる変更領域に表示されます。これらの変更を確認し、必要に応じて後でコミットできます。

    チェリーピックが失敗した場合に AppCode で変更リストを自動的に作成する場合は、設定 | バージョン管理 | 変更リストで対応する設定をオンにします。

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

個別の変更を適用する

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

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

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

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

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

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

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

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

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

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

  1. 変更が適用されるブランチに切り替えます

  2. ブランチポップアップ(メインメニュー Git | ブランチ)または Git ツールウィンドウのブランチペインで、適用するファイルを含むブランチを選択し、コンテキストメニューから作業ツリーとの差分を表示を選択します。

    開いた変更ツールウィンドウには、現在チェックアウトされているブランチと比較して、選択したブランチで異なるすべてのファイルのリストが表示されます。

    Show diff between selected branch and current working tree
    • 選択したブランチに存在し、現在のブランチにないファイルは、灰色でマークされます。

    • 現在のブランチに存在するが、選択したブランチにないファイルは、緑色でマークされます。

    • 選択したブランチと現在のブランチの違いを含むファイルは、青色でマークされています。

    ブランチを入れ替えリンクをクリックして、他のブランチと比較するベースと見なされるブランチを変更できます。

  3. 現在のブランチに適用するファイルを選択し、コンテキストメニューからブランチから取得を選択するか、ツールバーの Get from Branch をクリックします。

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

関連ページ:

Git を使用して複数のフィーチャーを同時に処理する

場合によっては、未完成のものを使って別のタスクに切り替えてから、それらに戻る必要があります。AppCode はあなたの作業を失うことなくいくつかの異なる機能に便利に取り組むためのいくつかの方法を提供します: 保留中の変更はスタッシュまたはシェルブできます。スタッシュの変更は、シェルブに非常に似ています。唯一の違いは、パッチの生成方法と適用方法にあります。スタッシュは Git によって生成され、AppCode の内部または外部から適用できます。変更がシェルブされたパッチは AppCode によって生...

Git ブランチの管理

Git では、分岐は強力なメカニズムであり、たとえば、機能で作業する必要がある場合や、リリースのためにコードベースの特定の状態をフリーズする必要がある場合などに、メインの開発ラインから分岐することができます。AppCode では、ブランチでのすべての操作は Git ブランチポップアップで実行されます。これを呼び出すには、ステータスバーの Git ウィジェットをクリックします (現在チェックアウトされているブランチの名前が表示されます)。Git ツールウィンドウのブランチペインで、ブランチを管理し、複...

Git の競合を解決する

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

バージョン管理ウィンドウ

このツールウィンドウは、プロジェクトでバージョン管理統合が有効になっている場合に使用できます。ツールウィンドウには、VCS 関連の情報を表示し、変更リストの管理、VCS 固有のアクションの実行、他のチームメンバーによる変更の表示などを可能にするいくつかのビュー / タブがあります。コンソールタブ: このタブには、VCS 関連のコマンドを実行した結果が表示されます。ローカル変更タブ: ローカルで変更され、まだリポジトリにコミットされていないファイルのリストを表示します。履歴タブ: このタブは、VC...

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

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

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

Git を使用すると、プロジェクト履歴を編集できます。これは、機能ブランチで作業していて、他の人と共有する前に、それをクリーンアップして希望どおりに表示したい場合に便利です。例: コミットメッセージを編集したり、同じ機能に関連する小さなコミットをまとめたり、無関係な変更を含むコミットを個別のコミットに分割したり、前のコミットに変更を追加したりできます。コミットメッセージを編集する:変更する必要があるのがコミットメッセージだけであれば、このコミットをプッシュする前にそれを編集できます。Git ツー...