以前のコミット状態に戻す - Git による版管理環境を構築する

SPECIAL


以前のコミット状態に戻す

HEAD の位置を移動する方法

間違えてコミットやマージをしてしまった場合など、以前のコミット状態に戻したい場合もあると思います。

その時には、まずは "git log" を実行して、直前のコミットに割り当てられた ID を確認したら、それを使って次のようにします。

git reset --hard コミットID

このようにすることで、ワーキングコピーを含むすべての状態が、指定した ID の状態に戻ります。

"git reset" には "--hard" のほかにもいくつかオプションが用意されているので、それについても簡単に整理してみます。

  HEAD Staging Working  
--soft 戻る - - 現在の HEAD の位置を、指定したブランチに移動します。
ワーキングコピーやステージングされたファイルは、現状が維持されます。
ちなみにもともとの HEAD の位置に戻りたい場合は ORIG_HEAD へ移動すれば良いとのことです。
--mixed
(省略)
戻る 戻る - 現在の HEAD の位置とステージングの状態を移動します。
ワーキングコピーについては、編集中の内容がそのまま残ります。
--hard 戻る 戻る 戻る 現在の HEAD の位置を指定したブランチに移動し、ステージングとワーキングコピーについても、そのブランチの状態に戻します。

このようなオプションを使って、HEAD の位置を調整することができるようになっています。

たとえば "git reset HEAD" とすることで、オプションを省略すると "--mixed" になるので、これで HEAD とステージングが HEAD そのものにもどる、つまり HEAD の位置はそのまま、ステージングされたファイルだけをリセットすることができる感じでした。

"git revert" を使用する方法

同じように、HEAD の位置を元に戻す方法として、次の方法があります。

git revert コミットID

このようにすることで、"git reset --hard" と同等の、HEAD の位置やステージングの状態、ワーキングコピーの全てを、指定したコミットの状態まで戻すことができます。

なお "git reset --hard" と "git revert" との違いは、こちらはコミットを前の状態に戻したことが記録されるとのことでした。"git reset" はコミットをなかったことにするので、ログに残したいかどうかで、使い分ける感じになると思います。

 

目次