Gitのcommitの取り消し、打ち消し、上書き

今回はGitのcommitの取り消し、打ち消し、上書きについてまとめていきます。

コミットの取り消し

直前のコミットをなかった事にするには

git reset --hard HEAD^

を叩けばOKです。

  • --hardオプション:コミット取り消した上でワークディレクトリの内容も書き換えたい場合に使用。
  • --softオプション:ワークディレクトリの内容はそのままでコミットだけを取り消したい場合に使用。
  • HEAD^:直前のコミットを意味します。
  • HEAD~{n} :n個前のコミットを意味します。
    • HEAD^HEAD~{n}の代わりにコミットのハッシュ値を書いても良いです。
    • gitのv1.8.5からは、「HEAD」のエイリアスとして「@」が用意されています。
    • HEAD~HEAD^@^は同じ意味。
    • HEAD^^^HEAD~3HEAD~~~HEAD~{3}@^^^は同じ意味。

コミットの打ち消し

作業ツリーを指定したコミット時点の状態にまで戻し、コミットを行う(コミットをなかったことにはせず、逆向きのコミットをすることで履歴を残す)には、

git revert コミットのハッシュ値

を叩けばOKです。

コミットの上書き

直前のコミットに上書きするには、

git commit --amend

を叩けばOKです。

  • コミットメッセージを変更したい時よく使います。
  • git rebase失敗した時、コンフリクトを避けるためにコミットを上書きする」という使い方もよくします。