Git と Visual Studio 2017 その 13 : Visual Studio によるアイテムの比較

前回の記事では Git でアイテムの比較を行いました。今回は Visual Studio 2017 の機能を見ていきます。

アイテムの比較 : VS

Visual Studio 2017 では Git で行えるアイテム比較のうちよく使うものが GUI でサポートされているほか、独自の機能も実装されています。

二つのコミットの比較

1. チームエクスプローラー | 変更 | アクション | 履歴の表示を開きます。

image

2. 1 つ目と3 つ目のコミットを選択し、右クリックから ”コミットの比較” をクリックします。

image

3. コミットの比較ウィンドウが開き、比較結果が表示されます。

image

4. 変更セクションにある README.md をダブルクリックすると差分が表示されます。Git でも ‘git difftool HEAD~1 HEAD README.md’ を実行すると同じ画面が開きます。前回記事で発覚した通り、ファイルのエンコードが異なりますが、その旨も表示されています。

image image

5. 差分の比較などは GUI ツールである VS の遥かに容易ですが、Git は stat など様々なオプションを提供するため必要に応じて使い分けします。

特定のアイテムを比較

Visual Studio はファイルから直接履歴を見ることが出来ます。

1. ソリューションエクスプローラーより README.md を右クリックし、”履歴の表示” をクリック。

image

2. 履歴の画面よりコミット を 2 つ選択、右クリックより  ”比較” をクリック。

image

3. ファイルの差分が確認可能。

4. ファイルレベルだけでなく、フォルダレベルでも同様。

作業ディレクトリ、ステージングエリア、コミット間の差分

Git と同様に、各エリアの差分も確認できます。

1. README.md に変更を加えてステージングエリアに追加後、さらに README.md を編集。作業ディレクトリにも出ることを確認。

image image

2. 変更セクションにある README.md を右クリックして ”未変更のものと比較” をクリック。この操作でステージングエリアと作業ディレクトリのアイテムを比較。

image image

3. ステージング済みの変更セクションにある README.md を右クリックして、”未変更のものと比較” をクリック。この操作でコミットとステージングエリアのアイテムを比較。

image image

4. ソリューションエクスプローラーより README.md を右クリックして、”未変更のものと比較” をクリック。この操作でコミットと作業ディレクトリのアイテムを比較。

image image

ブランチ間の比較

ブランチの比較は実質コミットの比較と同じですが、 Visual Studio からはできることとできないことがあります。

1. “dev” ブランチを作成してチェックアウト。

image

2. チームエクスプローラー | 変更より、コミットコメントを入れて ”ステージング済みをコミット” を実行。

image

3. ブランチの画面からは比較が行えないが、このタイミングでは dev ブランチの変更履歴に master も表示されているため、比較が可能。

image

4. master ブランチをチェックアウト。しかし ”確定されていない変更がある” とエラーでチェックアウト不可。作業ディレクトリにアイテムがあるためだが、Git から ‘git checkout -f master’ で切り替えできることをすでに知っているため、コマンド実行。変更を失うが現時点では不要。

image image

5. README.md に変更を加えてコミットを実行。

image image

6. この時点では master と dev ブランチを履歴から確認できないため、ブランチ間の比較が GUI からできない模様。

Inline Change history in Visual Studio

Visual Studio にはコードレンズと呼ばれる強力な機能があります。

1. Class1.cs ファイルに変更を加えて、何度かコミットを実行。

2. Class1 クラスの上部に変更履歴のリンクが表示されるので、クリック。履歴がその場で確認可能。

image

3. コミットをダブルクリックすると、コミット詳細も確認可能。

より詳細はこちらから。

まとめ

Git と Visual Studio 2017 で比較機能は少し異なりますが、それぞれの目的に合わせて使い分けることで効率的に作業が行えます。次回はソリューションを共有した後の取り消しについて見ていきます。次の記事へ

中村 憲一郎