スポンサーリンク

このドキュメントの内容は、以下の通りです。

ソースコード管理ツールで、誤ったソースコードをしてしまった場合に、Gitでは、コミットを取り消すことができます。

git reset とは


オプション 意味 HEAD インデックス ワーキングツリー
soft HEAD の位置のみを変更します。 変更 なし なし
mixed HEADの位置とインデックスを変更します。 変更 変更 なし
hard HEADの位置とインデックス、ワーキングツリーを変更します。 変更 変更 変更


リポジトリの作成


まずは、作業用のディレクトリを作成します。
薫 $ mkdir reset/
薫 $ cd reset/
薫 $ git init
Initialized empty Git repository in /home/foo/tmp/Git/reset/.git/

テスト用のファイルの作成


  • a.txt を作成します。
  • a.txt をコミットします。
  • a.txt に変更を加えます。
  • a.txt をコミットします。
薫 $ echo 1 > a.txt
薫 $ git add a.txt
薫 $ git commit -a -m '* 1st commit'
[master (root-commit) 51e5398] * 1st commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 a.txt
薫 $ echo 2 >a.txt
薫 $ git commit -a -m '* 2nd commit'
[master 12fc440] * 2nd commit
薫 $ git log -p | cat
commit 12fc440f86e9a04e7d45b5acaea55aa43597a886
Date:   Tue May 8 00:53:25 2012 +0900

    * 2nd commit

diff --git a/a.txt b/a.txt
index d00491f..0cfbf08 100644
+++ b/a.txt
@@ -1 +1 @@
-1
+2

Author: foo <foo@yahoo.com>
Date:   Tue May 8 00:53:11 2012 +0900
    * 1st commit
diff --git a/a.txt b/a.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
@@ -0,0 +1 @@
+1

Git の内容だけ元に戻す


まずは、状態の確認ですが、a.txt の内容は、2 です。
コミットログは、2つあります。

薫 $ cat a.txt
2
薫 $ git log |cat
Author: foo <foo@yahoo.com>
Date:   Tue May 8 00:53:25 2012 +0900

    * 2nd commit
commit 51e5398a790e337ed7573baae6c55b0beb2871d8
Date:   Tue May 8 00:53:11 2012 +0900

    * 1st commit

2つめのコミットを取り消したい場合、 reset します。

薫 $ git reset --soft HEAD^

ワーキングディレクトリのファイルには、変更亭はありません。

薫 $ cat a.txt
2

git のログを確認してみると、2回目のコミットのログは、削除されています。

薫 $ git log |cat
commit 51e5398a790e337ed7573baae6c55b0beb2871d8
Date:   Tue May 8 00:53:11 2012 +0900

    * 1st commit

以上のように、soft reset は、リポジトリ内を元に戻しますが、ワーキングディレクトリには影響はありません。

Git の内容とワーキングディレクトリの内容を元に戻す


さて、今度は、 hard reset を試してみます。
「テスト用のファイルの作成」が終わった後の状態です。

まず、ワーキングディレクトリのファイルの内容は、2 です。

薫 $ cat a.txt
2

それでは、 reset hard で、ワーキングディレクトリとリポジトリの内容を1つ前の状態に戻します。

薫 $ git reset --hard HEAD^
HEAD is now at 51e5398 * 1st commit

ワーキングディレクトリのファイルの中身は、最初に編集した内容に戻りました。

薫 $ cat a.txt
1

git の log を確認してみると、2つ目のコミットのログはなくなっています。
薫 $ git log |cat
commit 51e5398a790e337ed7573baae6c55b0beb2871d8
Date:   Tue May 8 00:53:11 2012 +0900

    * 1st commit
薫 $                                                       

ログ


コミットログやワーキングディレクトリから変更が消えてますが、 reflog には、ちゃんと reset のログが残ってます。
51e5398 HEAD@{0}: reset: moving to HEAD^
12fc440 HEAD@{1}: commit: * 2nd commit
51e5398 HEAD@{2}: commit (initial): * 1st commit

以上のように、hard を使うと、リポジトリの内容だけでなく、ワーキングディレクトリも元に戻ります。

合わせて読む


書籍を探す




スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー