Git と Visual Studio 2017 その 3 : 変更のリセット

前回の記事ではコミットによるソリューションの保存を紹介しましたが、今回は保存済のコミットをリセットする方法を紹介します。

リセット : Git

Git の reset コマンドを使うとコミットをキャンセルできますが、実際にはどのように動いているのでしょうか。

1. ‘git log --oneline’ で現在の状況を確認。oneline で結果を 1 行表示可能。

image

2. 現在の HEAD ファイルの情報を確認。最新のコミットをポイントしている。

image

3. ‘git reset --soft HEAD~1’ または ‘git reset --soft c25c9d8’ を実行して直前のコミットにリセット。HEAD~1 は HEAD がポイントするコミットの親コミットを指す。soft オプションはコミットはリセットするが、ステージングエリアは保持する場合に利用。実行後 ‘git log’ と ‘git status’ で現状確認。コミット 3fd99cb は表示されていない。

image

4. エクスプローラーから見た場合には、まだ Git オブジェクトは存在する。

image

5. 再度 HEAD 情報を確認すると、現在最新である c25c9d8 をポイントしている。

image

6. 他のオプションも試すため ‘git reset --mixed c25c9d8’ を実行。mixed オプションは既定値で、ステージングエリアは削除するが作業ディレクトリはそのままとする。’git status’ で状況確認。ステージングエリアにはアイテムが存在しないが、作業ディレクトリにアイテムが存在。

image

7. 最後に ‘git reset --hard c25c9d8’ を実行。hard オプションは作業ディレクトリからもファイルを削除。エクスプローラーからもファイルは消えている。

image

リセットをリセット : Git

リセットしたけれど、再度元に戻したい場合もあります。その場合は単に元のコミット ID を指定して git reset すれば元に戻ります。今回の場合は ‘git reset --hard 3fd99cb’ を実行。もしコミット ID がわからなくなった場合は ‘git reflog’ を実行すれば確認可能です。reflog は HEAD がポイントするコミットの遷移が確認できます。便利。

image

リセット : VS

では全て元に戻ったところで、Visual Studio 2017 でリセットをしてみます。Git 関連の操作は主にチームエクスプローラーから行います。

1. チームエクスプローラーより”変更”を選択。

image

2. アクション | 履歴の表示を選択。

3. c25c9d8 を右クリックしてリセットを選択。既に --mixed と --hard の意味は把握しているため、今回は”変更を削除”を選択。soft は存在していない模様。

image

4. ソリューションエクスプローラーから Class2.cs とClass3.cs がないことを確認。

image

リセットをリセット : VS

残念ながら Visual Studio 2017 からはリセット前の ID を確認することも、ID を指定してリセットする方法も見つかりませんでした。当然コマンドラインから実施は可能であるため慌てる必要はありません。次の記事のために 'git reset --hard 3fd99cb' を実行しておきます。

まとめ こちらの記事によると既定で 90 日間はリセットしたコミットは削除されません。Git のコミットはスナップショットとしてソリューション全体をそのまま保持しているため、リセットをお何度でも行えます。リセットに失敗しても慌てるべからず。次の記事ではブランチについて見ていきます。次の記事へ

中村 憲一郎