gitでコミットを取り消す方法まとめ!reset・revertの違いも解説

git
\ Gitがよく分からない初心者の方へ /
さわっておぼえるGit入門
Gitがよく分からない初心者でも、
この1冊で基本操作を一通り理解できます。
👉 Amazonで詳しく見る
Kindle Unlimitedなら無料で読めます
▶ 無料で読む(Kindle Unlimited)

今回は、Gitでコミットを取り消す方法(戻す・削除する方法)について解説します。
Gitを使っていると、こんな場面があるかと思います。

  • 間違った内容でコミットしてしまった
  • 直前のコミットをなかったことにしたい
  • pushした後だけど修正したい
  • resetとrevertの違いが分からない

このような場合、Gitではいくつかの方法でコミットを取り消すことができます。
この記事では、以下を分かりやすく解説します。

  • コミットを取り消す方法(reset / revert)
  • それぞれの違い
  • 状況別のおすすめの使い方

結論:基本はこの2つを覚えればOK

まず結論からです。

  • 履歴ごと消したい → git reset
  • 履歴を残して打ち消したい → git revert

resetrevertで履歴を残すか、履歴自体を消すかの違いがあります。
この違いを理解することが最重要です。

git resetとは?

git resetは、コミット履歴を巻き戻すコマンドです。
履歴を消したい場合は、こちらを使いましょう。

よく使うコマンド

git reset --soft HEAD^

直前のコミットを取り消しつつ、変更内容は残します。
HEAD^で直前のコミットを指定し、--softオプションで内容を残しています。

変更内容を残して、ステージングエリアに追加された状態になります。

git reset --mixed HEAD^

コミットとステージングを取り消し、変更は作業ディレクトリに残ります。
変更内容を残して、ステージングエリアから除外された状態になります。

git reset --hard HEAD^

完全に削除します。

コミットも変更内容もすべて消えます。
コミットした内容が本当に不要なとき以外は使うことはないです。

resetの特徴

  • コミット履歴が消える
  • ローカル作業向き
  • push後には基本使わない(履歴が壊れるため)

git revertとは?

git revertは、コミットを打ち消す新しいコミットを作成するコマンドです。
コミットした履歴を残す場合は、こちらを使いましょう。

コミット内容は正しいけど、仕様変更で元に戻したい時など、意図的にコミット履歴を残すときに使うといいです。

基本コマンド

git revert HEAD

直前のコミットを打ち消すコミットが追加されます。

revertの特徴

revertの特徴は下記です。

  • 履歴が残る
  • チーム開発向き
  • push後でも使える

resetとrevertの違い

項目 reset revert
履歴 消える 残る
安全性 低い 高い
push後 NG OK
用途 ローカル修正 共有後の修正

履歴を意図的に残したいならrevertを使うとよいかと思います。
プッシュする前で、コミット履歴を修正したい時にはresetを使いましょう。

resetとrevertの使い分け

状況別のresetrevertの使い分けについてです。

① pushしていない場合

プッシュしていない時にはgit resetを使うのがオススメです。

git reset --soft HEAD^

理由としては下記になります。

  • 履歴をきれいに保てる
  • 修正しやすい

② push済みの場合

プッシュ済みの場合にはgit revertを使って、修正コミットを作りましょう。

git revert HEAD

理由としては下記になります。

  • 履歴を書き換えない
  • チームに影響を与えない

既にプッシュ済みの場合には、他のメンバーが取得している可能性があるので
revertを使う方が安全に更新できます。

③ 完全に消したい(ローカルのみ)

直近のコミットを完全に削除したい場合には、reset--hardオプションをつけます。

git reset --hard HEAD^

--hardを使うと、変更したファイルは元に戻せないです。
そのため、慎重に実行しましょう。

コミットだけ修正したい場合(おまけ)

最新コミットを「取り消すほどではないけど、直したい」という場合にはcommitコマンドで--amendを使うといいです。

git commit --amend

最新コミットのコミットメッセージの修正をすることができます。

また、コマンド実行前にファイルの追加を行うと、コミットにファイルを含めることができ
コミット忘れのファイルなどを後から追加するときに便利です。

まとめ

今回はコミットを取り消す方法についてまとめました。
Gitでコミットを取り消す方法は主に2つです。

  • reset:履歴を消す(ローカル用)
  • revert:履歴を残す(安全)

プッシュ前後で使い分けるようにしましょう。

  • push前 → reset
  • push後 → revert

どちらかというと、resetの方が活躍するシーンも多いので覚えておくと便利です。
(プッシュする前のコミット内容の見直しで、再度修正が必要だった場合など)

コメント