VSCodeで直前のコミットをキャンセルする方法|Gitやばい辞典

それは、突然やってくる。
この記事では、Gitで直前のコミットをキャンセルする方法を、VSCodeとコマンドライン(以下、コマンド)の両方で解説します。
Gitを覚えるのがつらい。でも、いざという時にGitが使えないのはやばい。どうせ覚えないといけないなら、さっさとマスターするのが吉。そんな現場ですぐに役立つGit実践集。それが「Gitやばい辞典」です。
この記事でやること
目標

直前のコミットをキャンセルし、ステージングにソースが残っている状態にもどします。
VSCodeで直前のコミットをキャンセルする方法

こちらが、誤って「コミット4」をコミットしてしまった状態のVSCode。
この「コミット4」をキャンセルしたいと思います。

ポイントは、戻りたいコミットを右クリックすること。
あとは簡単です、ダイアログの「Reset current branch to this Commit」を選んで「Soft」を選ぶだけ。さっそくやってみましょう!

「Soft」を選んで

「Yes, reset」をクリックするだ」け。

はい、このとおり何ごともなかったように元の世界にもどることができました。
ステージングにもちゃんとソースが残っていますね。
なぜ「soft」なのか?
今回は、ステージングを元の状態にするのが目的でしたので「soft」を選びました。なぜ「soft」がいいのかというとデフォルトの「mixed」にしてしまうと、ソースは残りますが、ステージングも解除されてしまいまうので、addしていなかった修正中のソースと混ざって「あれ?何をaddしてたんだったけ?」と分からなってしまうことがあります。そんな時は、「soft」を選んで、ひとつずつ「ー」を押してステージングを解除するのがおすすめです。普通に全部addしなおすのがめんどくさいってのもありますけどね。ただし、ファイルが少ない時や他に修正中のソースがない時は「mixed」でも良いです。「hard」はソースが消えちゃうので気をつけてくださいね!
| オプション | ファイルの変更内容 | ステージング状態 | おすすめの利用シーン |
--softオススメ! | 残る | 残る | コミットメッセージの修正や、追加でファイルをまとめ直したい時 |
--mixed (デフォルト) | 残る | 消える | どのファイルをコミットするか、最初から選び直したい時 |
--hard | 消える | 消える | 変更内容そのものが不要で、完全に直前の状態へ戻したい時 |
コマンドで直前のコミットをキャンセルする方法
コマンドでのコミットのキャンセル方法も確認しておきましょう。
コマンドはgit resetを使用します。
git reset --soft HEAD^こちらのコマンドを実行します。

完了です。
イメージが理解できてると怖くないですね!
ステージングの解除は「git reset」!?
VSCodeのステージングのファイルの右にある「ー」。これ、ファイルをステージングから解除するのによく使いますよね!でも実はあれ、内部で「git reset」が使われてるって知っていました?
git reset -q -- <ファイル名>
-q: Quietモード(余計なメッセージを出さない)
--: これ以降は「コミット名」ではなく「ファイル名」ですよ、という区切り裏側ではこんなコマンドが投げられていたんです。(おそらく)
つまり、「reset」には以下の2つの機能があるということです。
1.「add」を取り消す役割(アンステージ)
2.「コミット」を取り消す役割(本来のリセット)
ただ、これ、分かりにくいので最近違うコマンドが増えました。gt restoreです。
え?「そんなのあたりまえだろ?」と思ったあなた!いやいやいやいや、世の中にはGitアレルギー(生理的に無理)、コマンドアレルギー(生理的に無理)の人がたくさんいるんです。Gitやばい辞典はそんな方に向けて書いています。

