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 のリポジトリで以前のコミットに戻す方法について詳しく説明しました。
詳細については、以下をご覧ください。
関連記事 - Git Reset
- Git RM -- キャッシュと Git リセット ファイルの違い
- Git のリセット、元に戻す、およびチェックアウト コマンドの違い
- ローカル Git の変更を削除するために使用されるさまざまな方法
- 開発ブランチをマスター ブランチと同一にする
- 競合のある Git マージを元に戻す
- Git の変更を元に戻す