はじめに
SourceTreeでcommitを取り消しをしようとするとそれっぽい2択を迫られる。
「〜をこのコミットまで戻す」と「コミット適用前に戻す」
いや、どっち?なんかわかりづらい、、

「〜をこのコミットまで戻す」を選択した場合、次の3択を迫られる。
「Soft-すべてのローカルを保持」
「Mixed-作業コピーの変更内容を保持するが、インデックスをリセットする」
「Hard-すべての作業コピーの変更内容を破棄」

結局どれ使えばいいの?を場面ごとに整理。。
多々あるcommitを取り消したい場面
○ pushする前
- 直前の
commitメッセージの修正 - 古いやつの
commitメッセージの修正 -
commitの取り消し(reset)
○ pushした後
-
commitの取り消し(revert)
pushする前
直前のcommitメッセージの修正
commitする画面の右上の「コミットオプション」→「直前のコミットを上書き」

古いやつのcommitメッセージの修正
修正したいcommitの親commitのところで右クリックし、
「〜の子を対話形式でリベース」を選択。
「メッセージを編集」から編集できる。

commitの取り消し(reset)
戻したいコミットの上で「〜をこのコミットまで戻す」を選択。
Soft,Mixed,Hardについて
Soft,Mixedはどっちでもいい。
Softは変更内容がStaging済のファイルとして返ってくる

Mixedはステージングに未登録のファイルとして返ってくる

Mixedをしたあとに手動でファイルを破棄した方が確実なのでHardは使わないかな。
pushしてしまった後
commitの取り消し(revert)
branch1をpushしている状態で、push前に戻したい場合
「コミット適用前に戻す」を選択

一個前のcommitの「commit0」の状態まで戻った新しいcommitが生成する。

どうやらpushしてしまっても1つ前までなら戻れるみたい。
あとはコンフリクトとの戦いです。
おわりに
commitの取り消しができなくて困ってたので、整理してみました。
revertに関してはもう少し深堀りしていかないと。。