Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022
Visual Studio 2019 |Visual Studio 2022
ヒント
AI を使用して、Azure DevOps タスクに役立てることができます。 作業を開始するには、 Azure DevOps MCP Server で AI サポートを有効にする 方法に関するページを参照してください。
マージまたはリベースすると、あるブランチで行われた変更と、別のブランチで行われた変更を統合するように Git に指示します。 多くの場合、Git では、サポートなしでマージまたはリベースが自動的に完了します。 ただし、あるブランチで行われた変更が別のブランチで行われた変更と競合することが Git によって検出された場合は、競合を解決するように求められます。 マージの競合は、マージされたブランチが同じファイル行を異なる方法で編集するとき、または 1 つのブランチがファイルを変更し、別のブランチがファイルを削除したときに発生する可能性があります。 マージの競合を解決するプロセスは、Git マージとリベースの両方に適用できます。
Visual Studio で、またはコマンド ラインと任意のテキスト エディターを使用して、マージの競合を解決できます。
Git ワークフローの概要については、 Azure Repos Git チュートリアルを参照してください。
[前提条件]
| カテゴリ | Requirements |
|---|---|
| プロジェクトへのアクセス権 | プロジェクトのメンバー。 |
| アクセス許可 | - プライベート プロジェクトのコードを表示する: 少なくとも Basic アクセス。 - プライベート プロジェクトのコードを複製または投稿する: 共同作成者セキュリティ グループのメンバー、またはプロジェクト内の対応するアクセス許可。 - ブランチまたはリポジトリのアクセス許可を設定する: 管理アクセス許可 は、ブランチまたはリポジトリのアクセス許可です。 - 既定のブランチを変更する: 編集ポリシー はリポジトリのアクセス許可です。 - リポジトリをインポートする: プロジェクト管理者 セキュリティ グループのメンバーまたは Git プロジェクト レベルの [リポジトリ の作成 ] アクセス許可が [許可] に設定されています。 詳細については、「 Git リポジトリのアクセス許可を設定する」を参照してください。 |
| サービス | リポジトリが有効になっています。 |
| ツール | Optional.
az reposコマンドを使用する: Azure DevOps CLI。 |
注
パブリック プロジェクトでは、 利害関係者 アクセス権を持つユーザーは、コードの表示、複製、投稿など、Azure Repos へのフル アクセス権を持ちます。
| カテゴリ | Requirements |
|---|---|
| プロジェクトへのアクセス権 | プロジェクトのメンバー。 |
| アクセス許可 | - コードの表示: 基本 アクセスが最低限必要です。 - コードの複製または投稿: 共同作成者 セキュリティ グループのメンバー、またはプロジェクト内の対応するアクセス許可。 |
| サービス | リポジトリが有効になっています。 |
マージ競合を理解する
Git マージまたはリベースでは、ソース ブランチからのコミットが現在のローカル ブランチ (ターゲット ブランチ) に統合されます。 Git マージ は、 fast-forward または no-fast-forward マージを実行します。 高速転送なしのマージは、 3 方向 マージまたは 真 のマージとも呼ばれます。 Git リベース は別の種類のマージです。 これらのマージの種類を次の図に示します。
Git マージの場合、ターゲット ブランチのヒントがソース ブランチ内に存在する場合、既定のマージの種類は早送りマージになります。 それ以外の場合、既定のマージの種類は早送りなしのマージになります。
ターゲット ブランチの先端がソース ブランチから分岐した場合、Git では早送りマージが適用されないため、 早 送りマージでマージ競合が発生することはありません。 既定では、Git では可能な限り早送りマージが使用されます。 たとえば、Git は、リモートの対応するブランチからのみプルして更新しているローカル ブランチに fast-forward マージを適用します。
早送りなしのマージでは、ソース ブランチの変更とターゲット ブランチの変更を統合する新しいターゲット ブランチ "マージ コミット" が生成されます。 適用可能な変更は、両方のブランチに共通する最後のコミットの後に行われた変更です。 上の図では、コミット C は両方のブランチの最後の共通コミットです。 ソース ブランチの変更がターゲット ブランチの変更と競合する場合、Git によってマージの競合を解決するように求められます。 マージ コミット (L) には、統合されたソース ブランチとターゲット ブランチの変更が含まれています。 ソースブランチとターゲットブランチのヒント(KとE)はマージコミットの親です。 ブランチの コミット履歴では、マージコミットはマージ操作に役立つマーカーであり、マージされたブランチを明確に示します。
Git リベース では、ターゲット ブランチのコミット履歴が再シーケンスされるため、すべてのソース ブランチコミットが含まれ、最後の共通コミット以降のすべてのターゲットブランチコミットが格納されます。 上の図では、コミット C は両方のブランチの最後の共通コミットです。 これを表示するもう 1 つの方法は、ソース ブランチ履歴の上にターゲット ブランチの変更をリベースで再生することです。 ソース ブランチの変更がターゲット ブランチの変更と競合する場合、Git によってマージの競合を解決するように求められます。 早送りマージと同様に、リベースではマージ コミットは作成されません。 特に、リベースによって既存のターゲット ブランチ コミットのシーケンスが変更されます。これは、他のマージ戦略の場合ではありません。 上の図では、コミット K' には K と同じ変更が含まれていますが、C ではなくコミット E にリンクするため、新しいコミット ID が含まれています。
Git のマージとリベースは、ターゲット ブランチのみを変更します。ソース ブランチは変更されません。 1 つ以上のマージ競合が発生した場合は、それらを解決してマージまたはリベースを完了する必要があります。 または、マージ/リベース操作を取り消し、ターゲット ブランチを以前の状態に戻すことができます。
マージ オプションと戦略の詳細については、 Git リファレンス マニュアル と Git マージ戦略を参照してください。
マージの競合を解決するタイミング
Git マージ と Git リベース は、 Git ワークフローで広く使用されています。 ローカル機能またはバグ修正ブランチで作業する場合は、次の操作を行うのが一般的です。
- リモートのコミットを定期的に
mainしてフェッチおよびマージすることで、ローカル ブランチをリモート対応のものに最新の状態に保ちます。 - リベースまたはマージを使用して、ローカル
mainブランチの更新プログラムをローカル機能ブランチに統合します。 - 対応するリモート ブランチに プッシュ して、ローカル機能ブランチの作業をバックアップします。
- 機能が完了したら、リモートの機能ブランチをリモートの
ブランチにマージする プルリクエスト を作成します。
リモートの変更をローカル リポジトリに頻繁に統合することで、他のユーザーによる最近の作業を把握し、発生したマージの競合を迅速に解決できます。
マージ競合を解決する
マージの競合を解決するプロセスは、Git マージと Git リベースの両方に適用できます。 次の手順では、マージ中のマージの競合を解決する方法について説明しますが、リベース中のマージの競合も同様に解決できます。
ヒント
ソース ブランチが リモート追跡 ブランチの場合、マージの前に Git フェッチ を実行して、ブランチが最新の状態であることを確認してください。 または、Git フェッチと Git マージを組み合わせた Git pull コマンドを実行します。
Visual Studio 2022 では、Git メニュー、Git の変更、およびソリューション エクスプローラーのコンテキスト メニューを使用して、Git バージョン管理エクスペリエンスが提供されます。 Visual Studio 2019 バージョン 16.8 には、 チーム エクスプローラー の Git ユーザー インターフェイスも用意されています。 詳細については、「 Visual Studio 2019 - チーム エクスプローラー 」タブを参照してください。
Git リポジトリ ウィンドウの [ブランチ] ウィンドウで、ターゲット ブランチをチェックアウトします。 次に、ソース ブランチを右クリックし、[
マージ ソース ブランチ を ターゲット ブランチ に結合 ] を選択します。 競合が原因で Git によってマージが停止された場合、Visual Studio から通知されます。 その場合は、競合を解決するか、マージをキャンセルしてマージ前の状態に戻すことができます。 [Git の変更] ウィンドウの [結合されていない変更] セクションには、マージの競合があるファイルが一覧表示されます。 コンテンツにマージ競合があるファイルの場合は、ファイルをダブルクリックしてマージ エディターで開きます。
マージ エディターの [受信 ] ウィンドウにソース ブランチ ファイルのバージョンが表示され、[ 現在] ウィンドウにターゲット ブランチ ファイルのバージョンが表示され、[ 結果 ] ウィンドウに結果のマージ ファイルが表示されます。 特定のソースまたはターゲットブランチの変更を適用するには、保持する競合する行の横にあるチェックボックスをオンにします。 結果ペインでマージ ファイルを直接編集することもできます。 現在のファイル内のすべてのマージ競合を解決した後、[マージの 受け入れ ] を選択します。 コンテンツが競合するファイルごとに、この手順を繰り返します。
1 つのブランチで編集され、もう一方のブランチで削除されたファイルの場合は、ファイルを右クリックし、目的のブランチ アクションを選択します。
[Git Changes]\(Git の変更\) ウィンドウで、コミット メッセージを入力し、[ Commit Staged]\(ステージングされたコミット \) を選択してマージを完了します。これは、すべてのファイルのすべてのマージ競合を解決した後です。