こんばんは~
今回はgitを使う上では欠かせないgit resetのオプション(soft, hard, mixed)の使うシーンと使った際の処理の違いについて説明します!
1人でgitをcommitやpushしていたときはあまりコメントに気を使っていませんでしたが、ついにチーム開発ということで、他の人に分かりやすく、間違いなくcommitするためにgit resetの方法を知っていくことは必須でした!(感想)
git reset --softはどんな時に使う?
『commitするときのコメント打ってる途中でenter押してしちゃったー』『手が勝手にcommitしてた~』という時ありますよね!そこでストップしてください!こんな時に使えるのがsoftオプションです。
$ git reset --soft
このコマンドを打つと何が起きるかというと、git commit -m "コメント"
を打つ直前に戻ることができます。つまり、さっきのcommitはなかったことに!ということになります。逆にcommit以外は何も変わっていないため、git addをした直後の状態で、インデックス(commitする前にgit addで更新された情報を移しておいた場所)や作業ツリー(自分が手元で編集したファイルなど)は変化していません。そのため、もしcommitしなおしたい場合はgit reset --softを打った後にもう一度commitしてみてください。
インデックスや作業ツリーとは何ぞや?という方はこちらの記事がおすすめ
git reset (--mixed)とは?
実はgit reset --mixedとgit resetは全く同じコマンドです。(git resetのデフォルトが--mixed)そのため、使用する際にはどちらを使ってもOKです!
ではどんな時に使うかというと、commitしちゃったけどgit addをする前に戻りたい!という時に使います。それってそもそもどんな時かというと、例えば『自分の個人情報が載ったファイルをgit addしちゃった挙句そのまま気づかずcommitしちゃった』という時に用います。このままpushすると設定によっては全世界に自分の個人情報を晒しかねないということで、そんなときにgit resetを使います!
$ git reset #どちらを使ってもokです
$ git reset --mixed
これをするとcommitコメントはリセットされ、インデックスはgit add
する前の状態に戻ります。--softではコミットがなかったことになりましたが、--mixsedではそれに付け加えてgit addしなかったことにできます。つまり、git add直前の状態に戻れ、作業ツリーのみそのままです。
git addでインデックスに追加したくないファイルを除外する方法はこちら(.gitignoreファイルについて)
git reset --hardは何ができる?
これは先ほどの--mixsedの内容に加えて、前回のコミット後から編集したファイルの更新をすべてなかったことにできてしまいます。つまり、作業ツリーの更新データはすべて消え、前回のcommit直後の状態に戻るということです。正確には前回のcommit情報で現在の作業ツリーを上書きするというイメージです。commit、インデックス、作業ツリーのすべてが前回コミットの状況までリセットされます。
$ git reset --hard
これは何らかの機能を実装したが最初から間違っていた、やり直した方が早いかもという時に使えるかもしれませんが、他にも書いた記述はすべてリセットされてしまうので、慎重に使いたいですね。
今回参考にさせていただいた記事はこちらです(全体)。
一番コンパクトで正しい説明文が載っているので、オプションを理解できたらこちらで覚えていただけるといいかなと思います。
おまけ(今日のgitエラー対処法)
今日2人で同じbranchをcommitしてエラーが出たので(初心者あるある?)、その時に参考にした記事を載せておきます。
また、ディレクトリ作成後、ターミナルでSSHのURLを間違えて登録してしまったときの対処法も参考にさせていただいたので、こちらもおまけで載せます。