変更のリセット、コミットのリセット
ファイルの変更のやり直し
- 間違って消してしまった!
- 変更の破棄(リセット)で戻す
コミットをもとに戻す
- Hardを選ぶ
ファイルについて間違った変更を行ってしまった場合、それを元に戻すことをリセットもしくは変更の破棄と言います。この方法についてご紹介します。画面を共有します。
変更のリセット
はい、色々とコミットがあります。そしてコミットの中身を更に続けていくという事で、作業を行います。いろんな作業をきっとすると思うんです。で、なんかこうね、いろいろ文字を打ったりとかやって行きますよね。まだ、ただのテキストならいいんですけども、色んなソースコードを触る場合は、ソースコードを一部ね、編集したりすることもあるでしょう。PHP のコードで echo で何某みたいなことを書いたりするといったような事もやるかもしれません。追加してるうちはどんどんいいんです。
で、何か作業やってる間に、例えば間違って消してしまったとしましょう。なんかね不意に間違って保存しちゃった。この状態になれば ctrl + z (command + z)で戻ればいいんですけども、何かこう間違って色々やってしまって、エディターも保存しちゃった、もしくはエディターを閉じてしまったってなったら、どうしましょう?
えーと、ちょっと青ざめますねぇ。「えーと…(汗)」となりますね。まずは、ちょっと一旦フォルダー(※ファインダー)で、これ(test.txt)を開けてみたいんですけど、当然、なんか消えてますし、ctrl + z (command + z) 押しても戻ってきませんと。困りました、はい…。という時に、でも Git があれば安心というお話をしたいと思っております。
Git は「変更があった時にその内容を検知してくれる」という機能をお伝えしておりました。SourceTreeに実際に行ってみますと、ここですね。どこの内容において何かしらテストが削除されてるというのが分かります。もっと消しときましょうか。「間違って全部消しちゃった」みたいになったとして、何か間違って「a」って文字だけあった…こんな事はないでしょうけど、あるとしましょう(笑)
そうなった場合に、もうこれえらいこと(※ 大変な事)じゃないですか。でも、安心してくださいっていう内容です。
これは今「変更の履歴として削除された内容と追加された内容」がここに出ています。そして、その内容は破棄することができます。
どういう事かって言うと、ここ(「ステージングに未登録のファイル」にある「test.txt」の上)で右クリックをします。右クリックから、ここで「リセット」ですね。「変更の破棄」っていう風に Windows では書いてあるかもしれません(※ Windowsの方は図1を参照)。
「リセット」を押すとこの「確認」という形になって「選択したファイルへの変更を破棄してよろしいですか?」という風に言われます。これがポイントです。ファイルを破棄するんじゃなくて「ファイルに起こった変更を破棄していいですか」という内容になります。つまり「直前のコミットの状態までこのファイルを元に戻しますか?」という事と同様の意味合いという事になります。で、ここで Ok を押します。
そうすると、今、ここに変更がなくなりました。ということは、つまり、このように戻っている、ということなんです。伝わります?ちょっともう一回やります?
もう一回(test.txt に)行って完全に消しちゃいます。「a」だけになっちゃいました。これは完全に間違った作業でした。ここで、今変更が出ちゃってます。右クリックから「リセット」を押して OK を押します。OK を押すと、今「a」だったのが、その変更が破棄されて元に戻ると。まるで手品のようですが、これが Git のいいところです。良いところ良いところ。
このように、コミット前であれば、そのファイルごとにリセットして元に戻すことができます。ね~便利。
コミットのリセット
更にうっかりさんもいらっしゃるでしょう。コミットしてしまう場合もあるかもしれません。
何も考えずに「そうそう」って言って保存して、よくないですよ、よくないでしょう、と分かったのに「aaの追加」とね、確認してコミットメッセージまで行っちゃったのに、はい、コミットしてしまいました。
当然、ここにはもう、今、変更がコミットされてますから、ここには「aaの追加」ということになっています。ここで当然、元に戻したいんですけども、command + z (ctrl + z)でね、戻したいんですけども…今、戻りましたけど、戻らない場合もありましょう。その時に、一回変更を押して、これ(text.txt)をリセットして、さっきみたいに安心して「私、大丈夫。Git だからリセットしよう」と思ってリセットして、リセットしました。「よし、これで言われた通り元に戻るはず!」と思ったら戻るのはこの直近で、やってしまったコミットまでです。ですから、この「aa」より前に戻れない、という状態になってますね、基本的には。
ただ、これもご安心ください。今度は「コミット自体をリセットする」ということが可能です。今は「ファイルの変更をリセット」しました。それは「チェックアウト」っていう単語なんですけども、それとは別に、コミットとしてしまったのでコミット自体をリセットするという内容ですね。その時には、戻りたいコミットを選択して右クリック、そして「master をこのコミットまで戻す」(※ Windowsの方は図2を参照)です。
この master ってのは今の自分のいるブランチ名で、ブランチの事はまた後ほどご紹介しますけども、master をこのコミットまで戻すとすると、そこまでに行ったコミットは完全に無くなります。
ここで気をつけないといけないのは、コミットをリセットした場合には、そのコミット自体がなくなっちゃうので、もう1回リセットしたのを元に戻すというのはできません。けども、元には戻ります。「不可逆な戻り方」というふうに理解してください。
あの他でね、ダブルクリックして戻ると、元に戻れるんですけども、これは master は置いといて、別に自分で「HEAD」っての新しく作ってるんですけども、そうではないので「master としてここに戻る」という形になります。master をここまで戻すという形ですね。
そうすると「ブランチの示す先を移動をしてよろしいですか?」という風になります。この時に「Hard」ですね。もう難しいんで「Soft」とか「Mixed」は。
「Hard」とすると全部元に戻ると思ってください。「全ての作業コピーを変更内容を破棄」すると言う内容になります。つまり「このコミットまで戻って、それより先の分はなかったことにするけどいいんですか?」という内容になります。 OK ってすると、まさにここですね。「警告:破壊的な操作」ですよと、要は元に戻れません。「’Hard’リセットモードは、作業コピーとインデックスにあるすべてのローカルの変更を破棄します。続行していいですか?」と言われます(※ Windowsの方は図3を参照)。
要は、これよりも前のコミット一旦なくなるけどいいですか?という内容です。はい、で、これでもよければ OK です。OK ってすると、この今「aa」のコミットが完全に無くなりました。そして「test2の削除」というとこまで戻ってきましたので、戻ると先ほどの2行になっている、という内容になります。
この「コミットのリセット」っていうのは結構強烈な感じですけども、この形でもコミット元に戻すことができます。て、いうわけで「簡単な文言をコミットする前に戻すリセット」と「コミット自体を戻すリセット」この二つがあるという事について、覚えておいてください。
そして名前としては、コマンドの操作の方では明確なんですけども、ファイルをコミットする前に変更を戻すのはチェックアウト、コミットしてしまった後に戻すのはリセットです。
ただ、もうここは、コマンドラインを触らないのであれば、とりあえず覚えて頂かなくても結構です。「どっちともリセットで元に戻せるけども、やり方には二つあるよ」ということだけ覚えといていただければと思います。
そして皆さんも、そのファイルだけの変更の破棄・リセットと、コミットしてしまってからのリセット、この2種類を作業いただければ、と思います。
付録 : Windowsでの表示
Windows10 / SourceTree ver.3.3.8
図1
図2
図3