HOWTO · Git
コミット ID で Git リポジトリを元に戻す
コミット ID に基づいて Git リポジトリを元に戻すことができます。
このページの内容
この記事では、コミット ID に基づいて Git リポジトリを元に戻す方法について説明します。状態を調べるために古いコミットに戻るか、その後のコミットを削除する必要がある場合があります。
両方のシナリオについて説明しましょう。
一時的に Git コミットに切り替える
git checkout コマンドを使用して、コミット ID を指定しながら、一時的に古いコミットに切り替えます。
$ git checkout <Commit ID>
このコマンドは、リポジトリの HEAD を切り離します(ブランチでチェックアウトされていません)。この状態では、コミットできません。
以下に示すように、コミットに基づいて新しいブランチを作成する必要があります。
$ git switch -c <new-branch-name>
上記のコマンドを組み合わせて、以下に示すのと同じことを行うことができます。
$ git checkout -b <new-branch-name> <Commit ID>
コミット ID で Git リポジトリを元に戻す
ロールバックするコミット ID を渡すときに、--hard フラグを指定して git reset コマンドを使用します。以下のコマンドを実行します。
$ git reset --hard <Commit ID>
このコマンドを実行すると、前述のコミットまでの最近のコミットがすべて削除されます。このコマンドは、インデックス内のコミットされていない変更も削除します。
変更を保持したい場合は、次のようにします。
$ git stash
$ git reset --hard <Commit ID>
$ git stash pop
リモートリポジトリを更新する場合は、以下の git push コマンドを使用してください。
$ git push -f
このコマンドは、ローカルリポジトリに基づいてリモートリポジトリを上書きするため、注意してください。例を見てみましょう。
以下の例では、コミット ID に基づいて git リポジトリ Delftscopetech を元に戻そうとします。git log コマンドを実行して、リポジトリ内のすべてのコミットを一覧表示しましょう。
$ git log --oneline
Fourth Update に戻りたい場合、どうすればよいでしょうか。
以下のコンテキストで git reset コマンドを実行します。
$ git reset --hard df90895
HEAD is now at df90895 Fourth Update
出力は、HEAD が Fourth Update にあることを示しています。git push コマンドを実行して、変更をリモートリポジトリにプッシュできます。
リセットを元に戻す場合は、次の手順に従ってください。
まず、git reflog コマンドを実行して、リポジトリ内のすべての参照の更新を確認します。
$ git reflog
出力は同じようになります。リセットは HEAD@{0} で確認できます。
戻るには、以下に示すように git reset コマンドを実行します。
$ git reset HEAD@{1}
コミット履歴を確認しましょう。
$ git log --oneline
私たちの HEAD は Sixth Update に戻ってきました。
一言で言えば、コミット ID に基づいて Git リポジトリを元に戻すのは非常に簡単です。一時的にコミットに切り替える場合は、git checkout コマンドを使用します。
特定のコミットに戻すには、git reset --hard コマンドを使用して、コミットハッシュを指定します。