LoginSignup
1

Git で特定のコミットまで戻す(→作業完了したら、最新に戻す)(git reset)【Git Tips!】

Last updated at Posted at 2022-11-28

はじめに

不具合の調査って、時々、入れ込んだ箇所がわかるまで、コミットを一つずつ戻していく作業になったりしますよね。そんな時のお供が git reset コマンドです。

手順

まずはコミットを確認

git log コマンドでコミットのハッシュ値を確認します。
一度に多くのログを表示させたい場合、--oneline オプションが便利です。

ここでは「お気に入り機能」に取り掛かる前の f2940ec (下から2行目)に戻したいとします。

$ git log --oneline -n 20
2a2584e (HEAD -> v1.7.4_dev, origin/v1.7.4_dev, origin/master, origin/HEAD, master) v1.7.3 リリース
278f6b2 Merge pull request #165 from yokoba569/v1.7.3_dev
7a23fb5 (origin/v1.7.3_dev, v1.7.3_dev) Merge pull request #164 from yokoba569/#418_お気に入り対応
2394231 (origin/#418_お気に入り対応, #418_お気に入り対応) refs #418 DD対応 修正漏れ
8daa0f3 refs #418 お気に入り機能
f2940ec Merge pull request #163 from yokoba569/#445_起動変更オプション変更
a41ef31 ....

特定のコミットに戻す

git reset コマンドで戻します。--hard で変更内容をすべてクリアできます。
--soft なら、変更内容がコミットされていない状態で保持されます。

$ git reset --hard f2940ec
HEAD is now at f2940ec Merge pull request #163 from yokoba569/#445_起動変更オプション変更

最新の状態に戻す

調査が終わったり、reset するコミットを間違っちゃったというときはこれを使いましょう。
git reflog コマンドで戻したい状態を確認し、再び git reset コマンドです。

  • git reflog コマンドにより作業前の状態が HEAD@{2} であることがわかります。
    $ git reflog -n 3
    f2940ec (HEAD -> v1.7.4_dev) HEAD@{0}: reset: moving to f2940ec
    2a2584e (origin/v1.7.4_dev, origin/master, origin/HEAD, master) HEAD@{1}: checkout: moving from 
    master to v1.7.4_dev
    2a2584e (origin/v1.7.4_dev, origin/master, origin/HEAD, master) HEAD@{2}: commit: v1.7.3 リリース
    
  • git reset コマンドで作業前の HEAD@{2} に戻します。
    変更差分をクリアしていい場合は --hard をつけましょう。
    (保持したい場合は --soft ですが、あまり使わないかも?)
    $ git reset --hard HEAD@{2}
    HEAD is now at 2a2584e v1.7.3 リリース
    

追記:コミット番号指定でも出来ました

$ git reset --hard 2a2584e
HEAD is now at 2a2584e v1.7.3 リリース

最後に

特定のコミットまで戻す方法は以上となります。

不具合の調査って、イライラしちゃうこともありますよね。
そんな時に git のコマンドでまで手間取りたくはないものです。

この記事が一助になれば幸いです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1