Gitを使ってファイルを元に戻す話

これまでの作業は、一方的に編集を記録してましたが、
git checkoutを使って、編集状態を元に戻す方法を学びましょう。

まず、ブランチの切り替えに使ったときのことを思い出します。
$ git checkout <branch name>
これで、ブランチを切り替えると同時に、
そのブランチにおける最新の状態を復元することができます。
ですが、編集中のファイルが存在する時に実行するとどうなるでしょうか?

使用するフォルダ構成は以下の通りです。

Project
└── Work

まずは、リポジトリを初期化して、適当なファイルをコミットします。
$ cd Project/Work
$ git init
$ echo foo >> readme.txt
$ git add readme.txt
$ git commit -m "初回コミット"

次に、新しいブランチ上で、”readme.txt”を編集してみます。
$ git checkout -b topic
Switched to a new branch 'topic'
$ echo bar >> readme.txt
$ cat readme.txt
foo
bar

そして、masterブランチに切り替えてみます。
$ git checkout master

すると、同時に以下のような出力が行われました。
M readme.txt

これは、編集によってmasterブランチの最新と異なることを意味しています。
ファイルを開き直しても、編集が行われたままであることが確認できます。
このように、変更状態のファイルはブランチを切り替えても変更されません。

ところで、この現在の変更を破棄するにはどうしたら良いでしょう?
もちろん、先ほどの変更を編集して元に戻す方法もありますが、
せっかくなので、Gitを使って元に戻したいと思います。

まず、masterブランチにおける最新の状態との差分を見てみましょう。
$ git diff --color readme.txt
diff --git a/readme.txt b/readme.txt
index 257cc56..3bd1f0e 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
foo
+bar

--colorを付けることで、
追加された行と削除された行が色分けされて表示されます。
この他の方法として、git guiを使うのもオススメです。

変更内容の確認は終わりです。
では、さっそく変更内容を破棄します。
$ git checkout readme.txt

これで、変更は破棄されました。
差分の確認方法は、先ほど説明した通りです。
git diffを行っても、もう何も出力されないはずです。

次に、もう必要のないブランチを削除します。
$ git branch -d topic

これで、きれいさっぱり元に戻りました。

めでたし、めでたし。

Leave a Comment