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

Azhar Bashir Khan 2023年1月30日
  1. git reset を使用して Git リポジトリの以前のコミットにリセット
  2. git revert を使用して Git リポジトリの以前のコミットに戻す
Git のリポジトリで以前のコミットに戻す

このチュートリアルでは、Git のリポジトリで以前のコミットに戻す方法を学習します。

バージョン管理システムである Git は、共同開発環境で使用され、ファイルに加えられた変更を追跡します。

Git は、プロジェクトディレクトリ内のファイルの変更のスナップショットをキャプチャし、それらをコミットに関連付けるために使用されます。

Git では、コミットを使用して、ファイルに加えられた変更の履歴を参照および表示できます。

また、Git を使用して、Git リポジトリ内のプロジェクトディレクトリのファイルをリセットするか、コミットが作成されたときの以前のコミット(つまり、ディレクトリ内のファイルの状態)に戻すこともできます。

これを例を挙げて説明します。

git reset を使用して Git リポジトリの以前のコミットにリセット

共同開発環境では、Git を使用して、Git リポジトリ内のプロジェクトディレクトリ内のファイルに加えられた変更を追跡します。

作業を保存するためにコミットを作成すると、Git は一意の ID(別名 SHA またはハッシュ)を作成します。これにより、コミットされた特定の変更を、誰がいつ行ったかを記録できます。

コミットは、ファイル(またはファイルのセット)に対する個々の変更です。コミットには通常、行われた変更の簡単な説明であるコミットメッセージが含まれています。

場合によっては、プロジェクトディレクトリのリポジトリを以前のコミットに戻すかリセットする必要があります。

リポジトリの git log コマンドで示されているように、次のコミットがあるとします。

$ git log --oneline
e4cd6b4 (HEAD -> main, origin/main) my change
99541ed second change
41f1f2a first change
...

ここで、リポジトリをリセットして、SHA 41f1f2a がコメント first change で指定した以前のコミットに戻したいとしましょう。

これを行う 1つの方法は、git checkout コマンドを使用して一時的に前のコミットに切り替えることです。

したがって、次のようにします。

$ git checkout 41f1f2a

以前のコミットで新しいブランチを作成することもできるので、そのブランチで新しいブランチに新しい変更をコミットできます。

したがって、次のようにします。

$ git checkout -b first-change-branch 41f1f2a

代わりに、前回のコミット以降の変更を破棄する場合は、git reset コマンドを使用します。

リポジトリを以前のコミットにリセットするための git reset コマンドの構文は、git reset -hard <commit-sha-id> です。

したがって、この場合、次のようにします。

$ git reset --hard 41f1f2a

これは注意して使用するように注意してください。これにより、ローカルの変更も破棄されます。コミットされていない変更はすべて失われます。

または、次のように、リセットを実行する前に変更を隠しておくこともできます。

$ git stash
$ git reset --hard 41f1f2a
$ git stash pop

上記のコマンドを実行した後、ローカルの変更は stash に保存されます。次に、前のコミットにリセットした後、それらの変更がリポジトリに再適用されます。

git revert を使用して Git リポジトリの以前のコミットに戻す

リポジトリの履歴を保持したい場合は、git revert コマンドを使用します。

コマンド git revert を実行すると、Git はリバースパッチを使用してコミットを作成し、前のコミットを無効にします。このように、履歴を書き換えることはありません。

リポジトリを前のコミットに戻すための git revert コマンドの構文は、git reset <commit-sha-id1> <commit-sha-id2> ... です。

したがって、最初の 2つのコミットを元に戻して、リポジトリを SHA 41f1f2a で指定されたコミットに戻します。

$ git revert e4cd6b4 99541ed

指定された 2つのコミットによってリポジトリを元に戻します。

次のように git revert コマンドを実行することもできます。

$ git revert HEAD~2..HEAD

上記の git revert コマンドは、最後の 2つのコミットを元に戻します。

最後に、前述のように、git revert コマンドは、前のコミットをキャンセルするためのコミットを作成します。したがって、このコミットを保存する必要があります。

次のようにする必要があります。

$ git commit -m "reverted commits e4cd6b4 99541ed"

したがって、コミットの復帰は、新しいコミットとしてリポジトリに保存されるようになりました。

場合によっては、マージコミットが存在し、それを元に戻したい場合もあります。

オプション -m parent-number を指定して git revert コマンドを使用できます。このオプションは、メインラインの親番号(1 から始まる)を指定し、指定された親を基準にして変更を元に戻すことができます。

マージコミットには複数の親があります。git revert コマンドには、マージのどの親をメインラインと見なすかを決定するための追加情報が必要です。

コマンドの構文は、git revert -m 1 <commit-sha-id> です。1 は、メインラインとして最初の親に使用されます。

したがって、コミット SHA e4cd6b4 がマージコミットであると仮定します。次に、次のように実行できます。

$ git revert -m 1 e4cd6b4

したがって、Git のリポジトリで以前のコミットに戻す方法について詳しく説明しました。

詳細については、以下をご覧ください。

  1. git-reset
  2. git-revert

関連記事 - Git Reset

関連記事 - Git Revert