煙と消えるその前に

一服してるうちに忘れる、自分のための備忘録。とかとか

gitであれこれ戻したい

gitで何かを戻したい時、いつもどのコマンド叩くか忘れるのでメモ

ワーキングツリーを元に戻す

ファイル編集したけどまだaddしてない時

$ git checkout .
$ git checkout -- .
$ git checkout HEAD -- .

どれもHEADの状態にワーキングツリーを戻してくれる。(結果が同じなだけで挙動は違うんだろうけど・・・)
"--"が謎なんだけど、helpを見みるとこんな例があった。

If you have an unfortunate branch that is named hello.c, this step would be confused as an
instruction to switch to that branch. You should instead write:

$ git checkout -- hello.c

なるほど、ファイルと同名のブランチがあるとブランチ移動しちゃうから、--つければfile_pathとして解釈してくれるってことね。

indexを元に戻す

addしちゃったやつを戻す時

  • ワーキングツリーの変更はそのままでaddだけを戻すなら
$ git reset HEAD
  • ワーキングツリーの変更も含めてなかったことにするなら
$ git reset --hard HEAD

commitを元に戻す

commitしたけどやっぱやり戻したい時

  • commitだけを戻してaddした状態にするなら
$ git reset --soft HEAD~
  • commitとindexを戻してワーキングツリーを編集した状態にするなら
$ git reset HEAD~
$ git reset --mixed HEAD~
  • commitもindexもワーキングツリーも戻すなら
$ git reset --hard HEAD~

リモートにpushされてるコミットを元に戻す

pushしたんだけど、やっぱみすってたから戻したい!って時

  • 戻したいコミットのSHA-1を調べて
    • エディタが立ち上がるのでrevert commitのメッセージを入力する
$ git revert [SHA-1]
$ git push origin [branch]

リポジトリを編集する前の状態まで戻したいって時

色々やりすぎてわけわからない!とりあえずリモートの最新まで戻したいなら

$ git reset --hard origin/[branch名]