git でコミットした内容をなかったことにしたい(打ち消したい)時

2014/02/01

コミットを打ち消したい時に使う reset と revert について。あとオマケでコミット前のものを打ち消す Discard についても。それぞれ SourceTree でどうやるのかも含めてメモ。

コミット済みだけれど push はしてない場合

コミット済み push 前なら「git reset」。

例)誤ってコミットしてしまったとか、いくつか試しにコミットしたけどこのコミット要らないなーとなった場合。

例)マージしないでいいブランチを誤ってマージしてしまった場合。

上記それぞれ細かくコマンドなど見たい場合、git reset についてもまとめてみる – murankの日記 が詳しかったです。

SourceTree で git reset

戻りたいコミットを選択して右クリックから「現在のブランチをこのコミットまでリセット」。push してない範囲だけが取り消せるという認識で戻りたいコミットを選ぶようにしないと、コンフリクトの原因になる(はず)。

git-reset

コミットも push もしてある場合

コミットも push 済みなら「git revert」。

例)コミットして push もした内容にミスがあってバグる原因になっている。このコミットを消したい場合。

例)誤ってマージして push までしてしまった。このマージを取り消したい場合。

SourceTree で git revert

取り消したいコミットを選択して「コミットを打ち消し…」。消すとはいっても git 上にはログとしてはあって、該当コミットの逆になるような(まさに打ち消す)内容のコミットを作ってくれる。

git-revert

ただしマージを打ち消したい時はこれだと駄目で、コマンドラインから「git revert -m 1 {打ち消したいマージコミットのハッシュ値}」としなくてはいけない。マージコミットを SourceTree から打ち消す方法は見つからなかったので、ないのかなー。

コミットをまだしていない状態で直前のコミットまで戻したい場合

コミットしていない状態で直前コミットに戻したいならば「Discard」。

例)間違えてファイル消してしまった! この破棄を戻したい。

例)機能追加しようと思ってファイルを弄ってたら良く分からない状態になってしまったので一度この編集は全てなかったことにしたい。

SourceTree で git discard

左上にある「破棄」ボタンをクリック。「変更を破棄」ダイアログが出たら破棄したいものにチェックを入れて「変更を破棄」ボタンを押す。

git-discard

git-discard2

それにしても git 便利ですねー。

参考: