
SourceTreeで間違った内容をコミットしちゃった…。どうやって取り消しするんだろう?
変な操作してファイルの中身が消えちゃったりしないか不安だな。
SourceTreeを使ってバージョン管理をしていると、たまに「コミットを取り消したい」という場面に遭遇します。
しかし、SouceTreeの操作に慣れていないうちは「あれ?どうやって取り消すんだっけ?」と疑問に思ったり、ファイルに悪影響を与えないか不安に感じる方もいると思います。
そこで今回は、SourceTreeで「コミットを取り消す方法」を解説します。
SouceTreeでコミットを取り消しする方法
SourceTreeでコミットを取り消す方法ですが、操作自体はめちゃ簡単で、次の3ステップで完了します。
※あとで注意点があるので、まだやらないでくださいね。
- 戻りたいコミットを選択
- 右クリック
- 「現在のブランチをこのコミットまでリセット」をクリック
たとえば、下の「タイトルを赤文字に変更」のコミットを取り消すとしましょう。

この場合は、1つ前のコミットを選択→右クリック→現在のブランチをこのコミットまでリセットの順に進めればOK。
ここまでは、とても簡単な操作です。

しかし、重要なのはここからです。
「現在のブランチをこのコミットまでリセット」をクリックすると、下のポップアップが表示されます。

「使うモード」の矢印を押してみると、何やら「Soft」「Mixed」「Hard」の3つがあり、その中から1つ選ぶ必要があるようです。
GitやSouceTreeに慣れていない人だと、この時点で「何これ?意味わからん・・・」と不安で手が止まるかもしれませんね(僕はそうでした笑)。

実は、コミットの取り消しには次の3種類があって、目的に応じて使い分けが必要です。
それぞれ解説します。
Soft:コミット操作だけ取り消す
Softは、コミット操作だけを取り消すモードです。
下記のコミット履歴で解説します。
たとえば、「タイトルを赤文字に変更」のコミット操作だけを取り消したいとしましょう。

「1つ前のコミットを選択→右クリック→現在のブランチをこのコミットまでリセット」の順で進み、Soft(ローカルの変更を全てそのままにする)を選択してOKボタンを押します。


すると、「タイトルの赤文字を変更」のコミットが消え、「コミットされていない変更があります」に変わりました。

ファイルステータスを確認すると、該当のファイル(style.css)が「Indexにステージしたファイル」にいることがわかります。

また、作業ファイル自体は何の影響も受けていません。
あくまでコミット操作が取り消されただけで、タイトルへの赤色の指定はちゃんと残っていますし、画面上でも赤色が反映されたままです。


このように、Softは単純にコミット操作を取り消すだけのモードです。
Mixed:コミットとステージングを取り消す
Mixedは、コミット操作だけでなく、ステージングも一緒に取り消すモードです。
先ほどと同じ例を使って、今度は「Mixed(作業コピーの変更はそのままにするが、インデックスの状態をリセットする)」を選択してみましょう。

今度は「作業ツリーのファイル」に入りました。
つまり、コミットだけでなくステージングも取り消されたということです。

Soft同様、ファイル自体に変化はありません。

このように、Mixedモードでコミットを取り消すと、ファイル内容はそのままにコミット操作とステージングの両方を取り消しできます。
Hard:コミットもステージングも作業内容もすべて取り消す
コミットもステージングもファイルで行った作業内容もすべて取り消したい。正しくそんなハードな要望に応えてくれるのが、Hardモードです。
何といっても注意点は「コミットだけでなく作業内容も全部消えてしまう」という点です。例えば、仮に数百行のコードを書いていたら、それら全部が消滅します。
なので、「Hard(全ての作業コピーの変更を破棄する)」を選択すると、SouceTreeから「危険な作業しようとしてるけど、大丈夫?」と聞かれます(警告:破壊的な操作)。


それでも良ければ「はい」を押します。
すると、コミット履歴から「タイトルの赤文字を変更」がまるまる消えてしまいました。

ファイルを確認すると、赤文字のCSSが消えています。
当然、タイトルの文字色もデフォルトの黒に戻ってしまいました。


このように、Hardはコミット・ステージング・作業内容すべてを取り消してしまう、強力なモードです。
万が一全部消えても元に戻す手段はありますが、とはいえ操作は慎重に行いましょう。
まとめ
今回はSourceTreeでコミットを取り消す方法を解説しました。
操作自体はそれほど難しくありませんが、3つのモードの意味をきちんと知った上で使わないと、トラブルの原因になります。この機会にぜひ押さえておきましょう。