サイトアイコン ITC Media

Gitのコミットを取り消す|reset・revertの使い方

(最終更新月:2023年8月)

✔当記事は次のような疑問を持つ方へおすすめです

「gitでのコミットを取り消したいけれど、方法がわからない」

「コミットの取り消し方をステップバイステップで知りたい」

「gitでのコミット取り消しの示例を見て学びたい」

✔当記事で学べること

当記事では、gitでのコミット取り消しの基礎から、各種オプションを活用した詳しい適用まで、具体的な例を用いて解説していきます。

最後までお読みいただければ幸いです。

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Gitコミットの取り消しを理解するための前提知識

こちらのセクションでは、「Gitコミット取り消し」について詳しく説明します。

Gitのコミット取り消しについて理解することで、間違った操作を行った場合でも安心してコードを管理することが可能になるでしょう。

はじめに:Gitとコミットの重要性

Gitはバージョン管理システムの一つで、ソースコードの変更履歴を管理できます。

コミットとは、Gitにおいて変更履歴を記録する単位のことで、コードの変更や追加などの操作がまとまった状態のこと。

このコミットを使用することで、いつ誰が何を変更したのかを瞬時に把握することが可能になります。

しかし時には、間違ったファイルをコミットしてしまった、コミットメッセージに誤りがあったなど、誤ったコミットをおこなってしまうこともあるでしょう。

そうした場合に備えて、コミットを取り消す方法を理解しておくことは非常に重要です。

コミットを指定する基本的な方法

Gitでは、コミットを一意に特定するための「コミットハッシュ」が生成されます。

このハッシュ値はコミットごとに固有で、コミット内容の変更により動的に変化するものです。

以下にコミットハッシュを表示する基本的なコマンドを示します。

git log

このコマンドを実行すると、コミットの一覧が表示され、それぞれのコミットハッシュが確認できます。

また、一部のハッシュ値だけを指定してコミットを参照することも可能です。

git show 0a1b2c3d

オプションを活用してコミットを取り消す

こちらでは、具体的なコミットの取り消し方について説明します。

resetコマンドとそのオプションを活用することで、コミットの取り消しが可能です。

コミット取り消しの基本:resetとそのオプション

Gitでは、resetコマンドを使用することでコミットを取り消せます。

また、このコマンドはオプションと組み合わせることで、さまざまな種類のコミット取り消しが可能です。

具体的なコマンド例を以下に示します。

# --softオプションを用いた例
git reset --soft HEAD^

# --mixedオプションを用いた例
git reset --mixed HEAD^

# --hardオプションを用いた例
git reset --hard HEAD^

ここで、HEAD^は最新のコミットを指しています。

resetの具体例とその取り消し方

ここでは、実際にresetコマンドを使用してコミットを取り消す例を見てみましょう。

まずは、--softオプションを使用した例からです。

このオプションを使用すると、最新のコミットを取り消し、そのコミットで加えられた変更をステージングエリアに保持します。

git reset --soft HEAD^

次に、--mixedオプションを使用した例です。

このオプションを使用すると、最新のコミットを取り消し、そのコミットで加えられた変更をワーキングディレクトリに保持します。

git reset --mixed HEAD^

最後に、--hardオプションを使用した例です。

このオプションを使用すると、最新のコミットを取り消し、そのコミットで加えられた変更も完全に破棄します。

git reset --hard HEAD^

以上が、resetコマンドを用いたコミットの取り消し方です。

状況に応じて適切なオプションを使用しましょう。

さまざまな方法でコミットを取り消す

こちらでは、reset以外の方法でコミットを取り消す方法をご紹介します。

具体的には、revert--amendを利用した方法についてです。

revertを利用したコミット打ち消しの基本

revertは、特定のコミットの内容を打ち消す新たなコミットを作成するためのコマンドです。

これは、過去のコミットを取り消す際に特に有用で、その操作を公開リポジトリに反映させることが可能です。

revertの基本的な使用法は以下のとおり。

git revert [commit hash]

例えば、以下のコマンドは最新のコミットを打ち消す新しいコミットを作成します。

git revert HEAD

--amendを利用した直前のコミット上書き方法

コミットメッセージを修正したり、ステージングエリアの変更を追加したりする際には、--amendオプションを利用します。

このオプションは直前のコミットを上書きするためのもので、主に小さな修正や情報の追加に用いられます。

使用法は以下のとおりです。

git commit --amend -m "New commit message"

また、新たに変更をステージングした後にこのオプションを使用すると、その変更も直前のコミットに追加されます:

# Change some files
git add .
git commit --amend

このとき、コミットメッセージを省略すると、エディタが開き直前のコミットメッセージが表示されます。

これを編集して保存すれば、新たなコミットメッセージとして反映されます。

コミット取り消しの応用

こちらでは、コミット取り消しの応用的な話題をお伝えします。

具体的には、resetのリモートへの適用と、保護されたブランチにおける対処法を説明します。

resetによるリモートへの適用と注意点

git resetを利用してコミットを取り消した後、それをリモートリポジトリに反映させるには、強制的にpushする必要があります。

これはpushコマンドに-fオプションをつけることで可能です。

例えば以下のようになります:

git push origin master -f

しかしこの操作はリモートリポジトリの歴史を書き換えるため、他の開発者に影響を及ぼす可能性があります。

したがって、このコマンドは公開リポジトリや複数人で作業しているブランチでは極力使わないようにしましょう。

保護されたブランチにおける対処法

保護されたブランチ、例えばGitHubでよく使われるmastermainブランチでは、push -fが許可されていない場合が多いです。

そのようなブランチでコミットを取り消す必要がある場合は、先述のrevertを利用するのが適しています。

例えば、masterブランチで直前のコミットを取り消すには以下のコマンドを使いましょう。

git revert HEAD
git push origin master

この方法であれば、リポジトリの歴史を保持したままコミットの取り消しが可能です。

コミット取り消しと現状把握

コミットを取り消した後、現在の状態を把握するためにはgit logコマンドが役立ちます。

git logは、コミットの履歴を確認できるコマンドです。

以下にその使用例を示します。

git log

このコマンドは最新のコミットから順に表示し、各込ニットには以下の情報が含まれています。

また、現在の作業ディレクトリの状態を確認するにはgit statusコマンドを使用します。

このコマンドは、現在のブランチ、ステージングエリアの状態、ワーキングディレクトリの状態を表示します。

git status

これらのコマンドを駆使して、コミットを取り消した後もリポジトリの状況を確実に把握しましょう。

まとめ

当記事では、Gitのコミット取り消しについて学習してきました。

これらの知識は、Gitを使ったバージョン管理において非常に重要なものです。

しかし、これらのコマンドや操作は力強い一方で、取り扱いには注意が必要です。

コミットを取り消す前に、常にその影響をよく理解し、適切な方法を選択するようにしましょう。

モバイルバージョンを終了