【egit】コミットのリセットからリセットの戻し方まで
はじめに
EclipseでGitを使用しているのですが、コミットを間違えてしまうことや、Non Fast Forwardでプッシュできないことがよくあります...。
そんな時にはよくリセットにお世話になるので違いをまとめていこうと思います。
さらにこの間謝って必要なコミットをハードリセットしてしまって冷や汗をかいたので、その対処法などもメモしていきます ✏︎
Non Fast Forward についてはこちらの記事で詳しく説明されていますので参考にどうぞ
Non-Fast-Forward Push の解決
リセットとは
あるコミットにリセットを行うと、その時点までのコミットをなかったことにしてくれる機能です。
リセットにはソフト・混合・ハードの3種類があります。
種類 | 説明 |
---|---|
ソフト | リセットまでに変更した内容を「ステージされた変更」に戻す |
混合 | リセットまでに変更した内容を「ステージされていない変更」に戻す |
ハード | リセットまでに変更した内容を削除する |
リセットの実践
実際にリセットを行って種類の違いを見ていきます。
各リセットをする状況は同じものとして行います。
✧前提
①まず最初のコミットをします。
②次に変更を追加してコミットをします。
▼ヒストリーでみると2回コミットされていることが分かります。
✧ソフトリセットの場合
最初のコミット時点でソフトリセットをすると
▼ヒストリー上から2回目のコミットが消えています。
▼内容は変更されたままで、「ステージされた変更」にファイルが入っています。
✧混合リセットの場合
最初のコミット時点で混合リセットをすると
▼ヒストリー上から2回目のコミットが消えています。
▼内容は変更されたままで、「ステージされていない変更」にファイルが入っています。
✧ハードリセットの場合
最初のコミット時点でソフトリセットをすると
▼ヒストリー上から2回目のコミットが消えています。
▼内容の変更は削除されています。
リセットを戻す
①コミットをします。
②最初のコミット時点でハードリセットをして変更を削除します。
③gitのパースペクティブからリポジトリーを左クリック▶︎表示▶︎Git参照ログを選択します。
④すると今までのコミットログが参照できます。
リセットしたいリセットコミットを左クリック▶︎リセット▶︎ソフトを選択します。
⑤ヒストリー上にコミットが復活し、「ステージングされた変更」にファイルが入っています。
GIt参照ログからリセットをソフトリセットをすることでコミットを戻すことができました!!
おわりに
ハードコミットだとファイルの変更も削除してしまうので基本的にはソフトコミットを使用するのが良さそうです。