最初に
前回の引き続き、gitコマンドについて書いていきたいと思います。
gitの基礎知識を習得したい方は下記の記事にまとめています。
コミットの取り消し
コミット(セーブポイントを作ること)はしたものの取り消したいこともありますよね。
その時は下記のコマンドを叩けばOK。
$ git reset --hard HEAD~
ここで下記のオプションが重要になってきます。間違えると大変なことになることもあるので気をつけましょう。
-
--hard
オプション: コミットを取り消した上でワークディレクトリの内容も書き換えたい場合に使用 -
--soft
オプション: ワークディレクトリの内容はそのままでコミットだけを取り消したい場合に使用
そして
$ git log
commit 600bbffb4f794bd3930991e3a2eb31c3292f7daa (HEAD -> master, origin/master)
Author: Furukawa Takuya <hogehoge@gmail.com>
Date: Mon Oot 29 17:57:24 2018 +0900
first commit
などのコマンドを叩くとよく見かけるHEAD。
HEAD
は、今自分が作業している場所を示すポインタのこと。
-
HEAD
: 現在のコミット -
HEAD^
: 直前(一つ前)のコミット -
HEAD~{n}
: n個直前のコミット -
HEAD^
やHEAD~{n}
の代わりにコミットのハッシュ値を書いても良い。(ハッシュ値とは上記のgit log
コマンド実行結果を参考に説明するとcomiitに後続している50桁ほどの英数字のこと、コミット番号のようなもの) -
HEAD~
とHEAD^
と@^
は同じ -
HEAD~2
とHEAD~~
とHEAD^^
と@^^
は同じ -
HEAD~3
とHEAD~~~
とHEAD^^^
と@^^^
は同じ
個人的には、一番汎用性が高いHEAD~
の形を使うようにしています。他は知識として知っておけばいいと思います。
また、^(キャレット)
の使い所に簡易しては、こちらが参考になります。
コミットの打ち消し
作業ツリーを指定したコミット時点の状態にまで戻しコミットを行う(コミットをなかったことにはせず、逆向きのコミットをすることで履歴を残す)には、
$ git revert コミットのハッシュ値
を叩きます。
例えば、現在のgit logが
$ git log
commit 49ac2a1a85840c3f44f827a95c2bf9ed1cfb52b1 (HEAD -> master)
Author: Furukawa Takuya <hogehoge@gmail.com>
Date: Tue Oct 30 18:25:51 2018 +0900
Second commit
commit 600bbffb4f794bd3930991e3a2eb31c3292f7daa (origin/master)
Author: Furukawa Takuya <hogehoge@gmail.com>
Date: Tue Oct 30 17:57:24 2018 +0900
first commit
であるとします。
するとgit revert 49ac2a1a85840c3f44f827a95c2bf9ed1cfb52b1
を叩くと、
$ git log
commit 4cca74a43c23b13fb86e6f389f46eff5617c5447 (HEAD -> master)
Author: Furukawa Takuya <hogehoge@gmail.com>
Date: Tue Oct 30 18:26:52 2018 +0900
Revert "Second commit"
This reverts commit 49ac2a1a85840c3f44f827a95c2bf9ed1cfb52b1.
commit 49ac2a1a85840c3f44f827a95c2bf9ed1cfb52b1
Author: Furukawa Takuya <hogehoge@gmail.com>
Date: Tue Oct 30 18:25:51 2018 +0900
Second commit
commit 600bbffb4f794bd3930991e3a2eb31c3292f7daa (origin/master)
Author: Furukawa Takuya <hogehoge@gmail.com>
Date: Tue Oct 30 17:57:24 2018 +0900
first commit
となり、過去のコミット履歴が消えることはありません。
コミットの上書き
$ git commit --amend
こちらのコマンドにより直前のコミットを上書きすることができます。
コミットをして次のコミットをするまでの間に微調整を加える必要性が生じた時などに重宝します。
また、コミットメッセージを変更したい時などにもよく使います。
関連記事
#終わりに
コミットの修正方法などについて書きました。よくある誤解として、commitしたら、その次はpushいなければいけないというものがありますが、commitをいくつか溜めたのちにpushすることも可能ですので、キリの良いところでこまめにコミットしていくことをお勧めします(そして、わかりやすい名前をつけましょう)。