#はじめに
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に関してはもう少し深堀りしていかないと。。