Visual Studio 2015 Update 2 CTPでのGit機能の変更点

情報源: Visual Studio 2015 Update 2 | Release Notes

Update 2ではGit LFSの対応、ステージング、チェリーピックの対応、リセットコマンドの強化がGitに関する機能の追加点で、LFS以外の点についてみていきます。

またLFSですが、現CTPの段階では特にどのファイルをLFSの対象にするのか、LFSを使用するのかしないのかと言った設定はGUIとしては無いようです。

ステージング

VS2013にGit機能(VSTG)が追加された段階から多くの人が注文を付けてきたステージングが実装されました。

SnapCrab_ConsoleApplicationHello - Microsoft Visual Studio_2016-2-11_18-59-47_No-00

以上のようにチームエクスプローラの変更タブで、「変更」の項目にあるファイルをダブルクリックするか、コンテキストメニューから「ステージ」を選択します。

SnapCrab_ConsoleApplicationHello - Microsoft Visual Studio_2016-2-11_19-0-17_No-00

上図にある「段階的な変更」にファイルが移動します。ここは「ステージ」にして欲しかったところ。VSTGはこうやってGitに無い独自用語を使うので混乱します。

SnapCrab_ConsoleApplicationHello - Microsoft Visual Studio_2016-2-11_19-1-48_No-00_1

「コミットしてステージング」が従来の「コミット」ボタンで、ステージにあるものも、ステージには無いが変更されたファイルも含めてコミットします。いわゆるcommit -aです。実際の動作を考えると「コミットしてステージング」ではなく、「ステージングして、コミット」が正しいボタン名称でしょう。

SnapCrab_ConsoleApplicationHello - Microsoft Visual Studio_2016-2-11_21-42-37_No-00

「コミットしてステージング」右のプルダウンからステージ図にあるファイルのみを対象にコミットできます。

ステージング自体については以下のPro Gitの記事を参考にしてください。

Git の基本 – 変更内容のリポジトリへの記録

チェリーピック

チェリーピックも当初から要望があった機能ですが、これも追加されました。

SnapCrab_ConsoleApplicationHello - Microsoft Visual Studio_2016-2-11_19-21-51_No-00

チームエクスプローラのブランチタブで、チェリーピックしたい対象のブランチを選択し、コンテキストメニューを開いて、チェリーピックを選択します。

この場合チェリーピックの対象となるのは選択したブランチのヘッドが選択され、コンフリクトが無ければ即時全てのファイルがマージされます。

この後でコンフリクトがある場合には、コンフリクト解決するよう表示されるので、どちらのファイルを使うか選択するか、ファイルを編集してコンフリクトを解決します。

SnapCrab_ConsoleApplicationHello - Microsoft Visual Studio_2016-2-11_22-0-33_No-00

また、上の図のようにブランチのログ(履歴)を表示して、特定のコミットをチェリーピックの対象に選択することが出来ます。

チェリーピック自体については以下のPro Gitの木々を参照してください。

Git での分散作業 – プロジェクトの運営

変更のリセット

SnapCrab_ConsoleApplicationHello - Microsoft Visual Studio_2016-2-11_19-21-26_No-00

これは無理に翻訳しすぎでわかりませんね。

ブランチを対象にした(右クリックした)リセットの動作はgit reset HEADの動作になります。

「変更をリセットして削除(物理的)」がgit rest --hardです。これはワークツリーまで含めて最終のコミットに戻します。「変更をリセットして保持(–混合)」がgit rest --mixedもしくはresetコマンドのオプションなしなので、インデックスの内容を戻します。()内には無理に翻訳せずにGit resetコマンドのオプションをそのまま書いた方がわかりやすいと思います。

SnapCrab_ConsoleApplicationHello - Microsoft Visual Studio_2016-2-11_22-21-42_No-00

特定のコミットを対象にリセットしたい場合には、ブランチのログを表示して、コミットを選択、コンテキストメニューからリセットを選択します。

HEAD^を選択したいことも多いと思いますが、その時ちょっとめんどくさいかなと思います。あと、–soft欲しいときもあるよね。

まとめ

マージで–no-ffオプションなどの指定ができないかなとかリベース周りの改善とかまだ改善してほしいところも多いと思いますし、CLIのgitがまだまだ必要ですが、正直なところだいぶ良くなりました。

あとは意識的に行っているであろうTFVC(TFS)との用語の混合・混濁が改善されると、TFVCをいままで使ってこずにGitを使い込んできた人も面食らわずにVSTGを使えるかなと思います。