HOWTO · Git

Git リポジトリを以前のコミットに戻す

Git リポジトリで以前のコミットにロールバックできます。

この記事では、Git リポジトリを以前のコミットに戻す方法について概説します。 今回ご紹介する3つの方法をご紹介します。

  1. 以前のコミットに一時的にロールバックする
  2. 未公開のコミットを削除する
  3. 公開されたコミットを元に戻す

以前のコミットへの一時的なロールバック

最初の方法では、git checkout コマンドを使用します。

これにより、ブランチのコミット履歴を書き換えることなく、以前の Git コミットに戻ることができます。 ここに例があります。

これが私たちのコミット履歴であると仮定すると、どうすれば 3つのコミットに戻ることができるでしょうか? (例: HEAD~3)

コミット履歴

以下に示すように、git checkout コマンドを実行できます。

$ git checkout HEAD~3

分離モード

上記のように、現在は分離モードです。 ブランチに影響を与えることなく、変更を加え、実験し、変更をコミットできます。

行った変更が失われる可能性があるため、detached HEAD モードの間は注意してください。 これらの変更を保持するには、以下に示すように新しいブランチを作成します。

$ git checkout -b Detached

ブランチの名前は自由に指定できます。

未公開のコミットを削除する

未公開の変更は、まだリモート リポジトリにプッシュしていないコミットです。

git reset コマンドを使用してコミットを削除し、ローカル リポジトリを以前の状態にロールバックできます。 ここに例があります。

上記のセクションで説明した 3つのコミットを一時的に切り替えるのではなく、完全に削除したい場合はどうすればよいでしょうか? どうすればいいでしょうか?

以下に示すように、git reset コマンドを実行して 3つのコミットをハード削除します。

$ git reset --hard HEAD~3

上記のコマンドは、3つのコミットとコミットされていない変更を削除します。 コミットされていない変更を保持したい場合は、必ず git stash コマンドを実行してください。

この方法は、変更をリモート リポジトリにプッシュしていない場合、特に共有リポジトリの場合にのみ使用する必要があることに注意してください。

公開されたコミットを元に戻す

上記のセクションでは、未公開のコミットを削除する方法を見てきました。 すでにコミットをリモート リポジトリにプッシュしている場合はどうなりますか?

git reset --hard コマンドは破壊的であり、複数の開発者が同じプロジェクトで作業しているプロジェクトのタイムラインを台無しにする可能性があります。

公開されたコミットを元に戻す最も安全な方法は、git revert コマンドを使用することです。 これはコミット履歴を書き換えるのではなく、元に戻して新しいコミットを作成します。

他の開発者が何が起こっているのかを理解しやすくなります。

3つのコミットを元に戻すには、次を実行します。

$ git revert --no-commit HEAD~3..HEAD

3つのコミットを元に戻す

--no-commit フラグを使用すると、元に戻した 3つのコミットすべてに対して 1つのコミット メッセージを作成できます。 フラグを含めないと、コミットごとにコミット メッセージを作成する必要があり、見た目が煩雑になり、リポジトリが乱雑になります。

簡単に言うと、Git で以前のコミットに戻す方法は 3つあります。 それはすべて、状況での復帰の定義に依存します。

一時的に以前のコミットに切り替えたい場合は、git checkout コマンドを使用します。 git reset --hard は未公開の変更用に予約する必要がありますが、git revert コマンドは公開済みのコミットに最適です。