前回の続きです〜
今回はコミットの取り消し(reset)についてです〜
gitの使い方 コミットの取り消し(reset)
①取り消しは危険
reset(取り消し)は非常に危険なコマンドです〜
revertはコミットを打ち消したあとも打ち消したコミットに履歴から戻ることができますが、resetは履歴そのものを削除するので、二度と戻ることができなくなってしまいます〜
特にGit Hubなどにあげたプロジェクトで使うと他の人にまで迷惑がかかってしまうので、基本的にローカル環境のみで注意して使いましょう〜
②resetの使い方
それではresetを使ってみましょう〜
今のところ履歴は、First Commit → Second Commit → Revert "Second Commit"となっています〜
ので、Revert "Second Commit"を取り消してみましょう〜
$ git reset --hard HEAD~ HEAD is now at fa4595f Second Commit
「--hard」はリポジトリ上の取り消しだけではなく、実際のtest.txtファイルの内容まで取り消す時に付けます〜
HEADの後ろの「~」は、何番目かを表します〜今回は取り消しをして1つ前に戻りたいので「~」はひとつですが、2つ前のFirst Commitに戻りたい時は「~~」もしくは「~2」と書けば大丈夫です〜
$ git log commit fa4595ff783ca02c8162e49ad3253a6734e67377 Author: 名前 <メールアドレス> Date: Mon Aug 17 16:18:13 2015 +0900 Second Commit commit 29afc77b42799082ca80138015bde8e7be0f6bda Author: 名前 <メールアドレス> Date: Mon Aug 17 16:10:01 2015 +0900 First Commit
git logで確認してみると、確かにRevert "Second Commit"は削除されています〜
-
- hardオプションをつけていたのでtest.txtファイルのないようも「あああああ いいいいい」に戻っていると思います〜
③取り消しの取り消し
さて、Revert "Second Commit"の履歴は削除されました、もう二度と復元することはできません・・・!間違って消したとしても自己責任です!
普通ならそうなるのですが、直前のresetのみ救済措置が残されています〜
git reset --hard ORIG_HEAD HEAD is now at cf45336 Revert "Second Commit"
resetの対象にORIG_HEADを指定すると、reset前に戻すことができます〜
git logで確認してみましょう〜
$ git log commit cf453369abea76e3c4464a1639d7aac8b38f8c19 Author: 名前 <メールアドレス> Date: Mon Aug 17 16:51:17 2015 +0900 Revert "Second Commit" This reverts commit fa4595ff783ca02c8162e49ad3253a6734e67377. commit fa4595ff783ca02c8162e49ad3253a6734e67377 Author: 名前 <メールアドレス> Date: Mon Aug 17 16:18:13 2015 +0900 Second Commit commit 29afc77b42799082ca80138015bde8e7be0f6bda Author: 名前 <メールアドレス> Date: Mon Aug 17 16:10:01 2015 +0900 First Commit
なんとか元に戻すことができました〜
今回はここまでです〜
ありがとうございました〜