「Git」のコミット履歴を取り消す方法について解説します。コミット前の「git add」コマンドを取り消す方法については「git addの取り消し方法」をご覧下さい。また、「Git」の基本用語などをまだ把握していないという方は「Git の使い方 ~リポジトリへ変更内容を記録する方法~」や「Git の使い方 ~リポジトリの作成とコミット~」で説明していますのでご参考下さい。
最終更新日:2018年4月27日
関連記事:WindowsにGitをインストールする方法
関連記事:GitHub 入門 ~アカウントを作成する方法~
目次
1. ステージング・エリアのファイルをコミットする方法【git commit】
2. 直前の「コミット」を取り消す【git reset --soft HEAD^】
3. 直前の「コミット」と作業ディレクトリの変更を取り消す【git reset --hard HEAD^】
1. ステージング・エリアのファイルをコミットする方法
まずは、ステージング・エリアのファイルを「コミット」する方法についておさらいをしましょう。「コミット」について既に理解しているという方は読み飛ばして構いません。
作業ディレクトリーの「Git-ws」フォルダー内には、コミット済の二つのファイルがある状態です。このフォルダに新規ファイルを追加して、変更履歴を「コミット」します。
●「Git-ws」フォルダー
まずは、現在のコミット状況を確認してみましょう。
フォルダー内にカーソルを合わせて[右クリック]→[Git Bash Here]を選択して「Git Bash」を起動します。
「Git Bash」のコマンドプロンプトに以下のコマンドを入力して「Enter」キーを押して下さい。
$git log
$ git log
commit 900672ea676da0d91ea6292170d71c79c3eb62b7
Author: Taro Yamada
Date: Thu Feb 23 00:00:01 2017 +0900
First Commit MSG
二つのファイルの変更履歴がコミットされた状態です。「Git-ws」フォルダーに新規ファイル「git-sample3.txt」を追加します。ファイルを追加したら「git add」コマンドでファイルをステージング・エリアに追加します。
$git add git-sample3.txt
ステージング・エリアに追加した「git-sample3.txt」ファイルを「git commit」コマンドでコミットしましょう。
$git commit -m "Second Commit MSG"
$ git commit -m "Second Commit MSG"
[master d50a77a] Second Commit MSG
1 file changed, 8 insertions(+)
create mode 100644 git-sample3.txt
再度ログを確認してみましょう。
●[git log]
$ git log
commit d50a77aafbfa043df1e84f9c1c7d502128cbda08
Author: Taro Yamada
Date: Thu Feb 23 00:02:38 2017 +0900
Second Commit MSG
commit 900672ea676da0d91ea6292170d71c79c3eb62b7
Author: Taro Yamada
Date: Thu Feb 23 00:00:01 2017 +0900
First Commit MSG
2回目のコミットが追加されました。
2. 直前の「コミット」を取り消す【git reset --soft HEAD^】
2回目のコミットでは、新規のファイル「git-sample3.txt」を追加してコミットしましたが、このファイルにもう少し変更を加えてからコミットをしたかったとします。方法はいくつかありますが、直近のコミットを取り消す「git reset」コマンドを使った方法を確認してみましょう。
「Git Bash」のコマンドプロンプトに
$git reset --soft HEAD^
と入力して下さい。オプションの「--soft」は作業ディレクトリに加えた変更はそのままでコミットのみ取り消すオプションです。「HEAD^」は直前のコミットを表します。
「git status」コマンドで確認してみると、2回目のコミット前の状態まで戻っていることが確認できます。
●[git status]
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD
new file: git-sample3.txt
ログも確認してみましょう。2回目のコミットが取り消されています。
●[git log]
$ git log
commit 900672ea676da0d91ea6292170d71c79c3eb62b7
Author: Taro Yamada
Date: Thu Feb 23 00:00:01 2017 +0900
First Commit MSG
3. 直前の「コミット」と作業ディレクトリの変更を取り消す【git reset --hard HEAD^】
コミットだけでなく、作業ディレクトリに加えた変更も一緒に取り消しをすることも可能です。「git reset」コマンドのオプションを「--hard」にすると、コマンドの実行と一緒に先ほど追加した「git-sample3.txt」ファイルも削除されます。
$git reset --hard HEAD^
$ git reset --hard HEAD^
HEAD is now at 900672e First Commit MSG
最新のコミット(HEAD)情報がコマンドの下に表示されます。「git status」でコミット状況を確認してみると、「コミットするファイル情報はない」というメッセージが表示されます。
●[git status]
$ git status
On branch master
nothing to commit, working tree clean
作業ディレクトリの「Git-ws」フォルダーを確認してみましょう。
●「Git-ws」フォルダー
2回目のコミットで追加した「git-sample3.txt」が削除され、フォルダー内には一番最初のファイルが二つだけ残った状態になりました。
4. 直前の「コミット」をやり直す【git commit --amend】
[git commit]でファイルをコミットした後にファイルの修正を加えた場合、次のコミットではなく直前のコミットとして管理したいこともあると思います。そのような場合は、「git commit --amend」コマンドを使ってコミットのやり直しをすることが可能です。
「Git-ws」フォルダー内には、コミット済みの二つのファイル、「git-sample1.txt」と「git-sample2.txt」があります。「git-sample1.txt」ファイルを修正してみましょう。コミット後にファイル修正した後の状態を確認します。「git status」コマンドを叩いてみると、修正した「git-sample1.txt」ファイルのステイタスが「modified」になり変更された状態のファイルが「作業ディレクトリ」にあることが分かります。
●[git status]
$ git status
On branch master
Changes not staged for commit:
(use "git add
(use "git checkout --
modified: git-sample1.txt
no changes added to commit (use "git add" and/or "git commit -a")
修正ファイルをステージング・エリアに追加します。「git add」コマンドを入力して再度「git status」を確認してみましょう。
$git add git-sample2.txt
「git-sample2.txt」ファイルがステージング・エリアに追加されました。
●[git status]
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD
modified: git-sample2.txt
ステージング・エリアに追加された情報は、2回目のコミットとして登録することもできますが、直前のコミットに加えたい場合は、「コミットのやり直し」をすることで、直前のコミットの追加情報として登録し直すことが可能です。「git commit --amend」コマンドは直近のコミットに現在のステージング・エリアに追加された情報を追加するコマンドです。「コミットのやり直し」の前に今のコミットのログを確認してみましょう。
●[git status]
$ git log
commit aa6c8a85c606548941d1774de87b841184863e68
Author: Taro Yamada
Date: Thu Feb 23 00:00:07 2017 +0900
First Commit MSG
初回のコミットが登録されています。この状態でコミットのやり直し(git commit --amend)を実行します。
$git commit --amend -m "First Commit Message"
●[git commit --amend]
$ git commit --amend -m "First Commit Message"
[master f818ebe] First Commit Message
Date: Thu Feb 23 00:00:07 2017 +0900
2 files changed, 21 insertions(+)
create mode 100644 git-sample1.txt
create mode 100644 git-sample2.txt
ファイル二つと修正分が初回のコミットに登録されました。ログをもう一度確認します。
●[git log]
$ git log
commit f818ebe6550ba8e1f6da8df24b9b2f484bc03771
Author: Taro Yamada
Date: Thu Feb 23 00:00:07 2017 +0900
First Commit Message
ログに表示されるメッセージも変更しましたので、初回のコミットのログ表示にもきちんと反映されています。またコミットのやり直しですが、「commit ID」は変更されます。
5. 初回の「コミット」を取り消す【git update-ref -d HEAD】
初回のコミットを取り消すには「git update-ref」を使います。前の章で作成したコミットを使いましょう。初回コミットには、二つのファイル(git-sample1.txt と git-sample2.txt)が登録されている状態です。
$git update-ref -d HEAD
●[git status]
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached
new file: git-sample1.txt
new file: git-sample2.txt
初回コミットが取り消されて、作業ディレクトリ内のファイルがステージング・エリアに登録されている状態まで戻すことができました。
関連文書:
WindowsにGitをインストールする方法
関連文書:
Git for Windows の使い方 ~準備編~
関連文書:
Git の使い方 ~リポジトリの作成とコミット~
関連文書:
Git の使い方 ~リポジトリへ変更内容を記録する方法~
関連文書:
git add の取り消し方法
関連文書:
Gitでブランチを作成する方法