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

git reflog

出力は同じようになります。リセットは HEAD@{0} で確認できます。

戻るには、以下に示すように git reset コマンドを実行します。

$ git reset HEAD@{1}

コミット履歴を確認しましょう。

$ git log --oneline

レポ履歴 2

私たちの HEAD は Sixth Update に戻ってきました。

一言で言えば、コミット ID に基づいて Git リポジトリを元に戻すのは非常に簡単です。一時的にコミットに切り替える場合は、git checkout コマンドを使用します。

特定のコミットに戻すには、git reset --hard コマンドを使用して、コミットハッシュを指定します。