9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コミットは怖くない![取り消し、打ち消し、上書き]

Last updated at Posted at 2018-10-30

最初に

前回の引き続き、gitコマンドについて書いていきたいと思います。
gitの基礎知識を習得したい方は下記の記事にまとめています。

初めてのgitは6ステップで完了

コミットの取り消し

コミット(セーブポイントを作ること)はしたものの取り消したいこともありますよね。
その時は下記のコマンドを叩けば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~2HEAD~~HEAD^^@^^は同じ

  • HEAD~3HEAD~~~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

こちらのコマンドにより直前のコミットを上書きすることができます。
コミットをして次のコミットをするまでの間に微調整を加える必要性が生じた時などに重宝します。
また、コミットメッセージを変更したい時などにもよく使います。

関連記事

初めてのgitは6ステップで完了

#終わりに
コミットの修正方法などについて書きました。よくある誤解として、commitしたら、その次はpushいなければいけないというものがありますが、commitをいくつか溜めたのちにpushすることも可能ですので、キリの良いところでこまめにコミットしていくことをお勧めします(そして、わかりやすい名前をつけましょう)。

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?