競合の解決

ワークスペースとリモート Git リポジトリの両方で "同じ項目" に変更が加えられると、競合が発生します。 競合が発生すると、Git の状態 が [競合] になり、[コミット] が無効になります。

Git の状態が競合になっているレポートのスクリーンショット。

競合がある場合に [更新] を選択すると、更新する前に競合を解決する必要があることを示すメッセージが表示されます。

競合を通知する [ソース管理] タブのエラー メッセージのスクリーンショット。

競合を解決するには、次の 3 つの方法があります:

Git で競合を解決する。

[すべて更新] を選択すると、競合するすべての項目の一覧が表示されます。 その後、項目ごとに保持するバージョンを選択できます。 競合する項目ごとに、Git リポジトリから受信した変更を受け入れるか、ワークスペース内の現在のバージョンを保持するかを選択できます。

競合する項目のどのバージョンを保持するかを選択する UI のスクリーンショット。

  • [受信した変更を受け入れる] を選択して、ワークスペースの変更をオーバーライドします。 インポートが成功すると、ワークスペースの変更が失われ、Git の状態が "同期済み" に変わります。

  • [現在のコンテンツを保持する] を選択して、ワークスペースの現在のバージョンを維持します。 更新が完了すると、Git の状態が "コミットされていない変更" になります。これはワークスペースの変更がまだブランチにコミットされていないためです。

以前の状態に戻す

ワークスペース全体または Git ブランチを最後に同期された状態に戻すことができます。 Git ブランチを以前のコミットに戻した場合でも、同期されていないブランチに加えられた変更を確認できます。 ワークスペースを元に戻すと、最後のコミット以降にワークスペースに加えられたすべての変更が失われます。

以前の同期状態に戻すには、次の "いずれか" のアクションを実行します。

  • [元に戻す] コマンドを使用して、ワークスペース内の競合する項目を最後に同期された状態に戻します。
  • Azure DevOps の git revert コマンドを使用して、Git で最後に同期された状態に戻します。

ワークスペースを切断して再接続することで、競合を解決することもできます。 再接続するときに、同期する方向を選択します。ただし、再接続すると、競合している項目だけでなく、ワークスペースまたはブランチ内のすべての項目が上書きされることに注意してください。 ワークスペースまたはブランチは、最後に同期された状態に戻りません。 代わりに、1 つの場所にあるすべてのコンテンツがもう一方のコンテンツで上書きされます。

Git で競合を解決する

どのような変更が行われ、どのバージョンを選択すればよいのかが不明で、以前の状態に戻したくない場合は、新しいブランチを作成して現在のブランチと同期することで、Git リポジトリで競合の解決を試みることができます。

Note

ワークスペース管理者のみが、ワークスペースを新しいブランチに再接続できます。

  1. [ソース管理] パネルで、画面の下部に表示されている最後に同期されたブランチ ID を使用して新しいブランチをチェックアウトします

    [ソース管理] パネルで下方向矢印を選択して新しいブランチをチェックアウトする方法を示すスクリーンショット。

    画面の下部に表示されているブランチ ID 情報のスクリーンショット。

    この手順では、自分の変更と競合する変更が行われる前に、最後に同期された Git 状態を使用して、競合しているブランチから新しいブランチを作成します。 [ソース管理] パネルで変更を確認できますが、Git ブランチから更新するものはありません。 ブランチのチェックアウトでは現在のワークスペースの状態が保持されるため、ブランチを変更してもコミットされていない変更は保持されます。

  2. 新しいブランチに変更をコミットします。 この新しいブランチには、変更と競合しない以前のバージョンの Git ブランチに接続されている項目に加えた変更が含まれるようになりました。

  3. Git で、元のブランチと新しいブランチの間の競合を解決します。

  4. Git で、新しいブランチを元のブランチにマージします

  5. ファブリックで、ワークスペースを元のブランチに切り替えます