gitでいろいろ取り消したい


ローカルの変更取り消し

$ git checkout .

変更はこれで全部ないことにしてくれるが、

新規追加したファイルに関しては削除されないので

完全に元に戻したいのなら別途削除する必要がある

$ git clean -df .


addを取り消し

$ git reset HEAD .

これだけだとaddの状態しか取り消されないので、

変更も取り消したいのであれば、

ローカルの変更取り消し作業も行う必要がある


commitを取り消し

$ git reset [<mode>] [<commit>] .

modeのデフォルトは--mixedであるため

変更したファイルはすべてそのままでgitの履歴が変わるだけ。

変更したファイルも含めてすべて指定のcommit状態に

戻したいのであれば、modeに--hardを指定する

また、こちらも--hardを指定したとしても新規追加のファイルは

残ったままになっているので、

完全に元に戻したいのであれば別途削除する必要がある


pushを取り消し

$ git revert [<commit>]

$ git push

こちらはどちらかというとundoするという感じではなく

指定commitまでの変更を相殺するcommitを作成するというもの

なのでrevert後にpushすることで

リモートが実質undoをしたような状態になる

ちなみに...

複数コミットを取り消したい時は

-nオプションを指定することでできる

$ git revert -n [<commit>]

$ git revert -n [<commit>]
...
$ git commit
$ git push

-nは--no-commitと同じオプションで

その名の通り、自動でコミットをしないようにする