Gitでのミスリカバリー

##マージコミットをリバート
うっかり間違ったブランチで–no-ffでmergeを打ってしまった場合、
revertでそのコミットの変更を消すコミットをつくることができる。
ただし、このときどちらのブランチを残すのかという事を指示してあげる必要がある。
git logなどで、その時のマージコミットのログを見ると、どのコミット同士をマージしたのかということが書いてある。
それを見てどちらを残すかを-mオプションで指定する。

詳しくはここの80ページ目あたりが親切。

##リモートレポジトリに対してリセットをする
Gitでリモートリポジトリを巻き戻す - @tmtms のメモを参考にした。

まず、リセットしたいレポジトリのバックアップレポジトリをつくる。
これはいざ間違えた時の対策。
git push origin tar_bak

つづいてgit reflogして戻したい地点を見つける
*** HEAD@{0}: hoge
*** HEAD@{1}: hogehoge
*** HEAD@{2}: hogehogehoge
*** HEAD@{3}: hogehogehogehoge

hogehogehogeの地点まで戻りたいとして、
git push -f origin HEAD@{2}:tar
とすればよい。こうすると、origin/tarの指すコミットが移動する。

他の人にも影響することなので、やるときは注意。