コミット ID で Git リポジトリを元に戻す

John Wachira 2023年1月30日
  1. 一時的に Git コミットに切り替える
  2. コミット 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

出力は、HEADFourth Update にあることを示しています。git push コマンドを実行して、変更をリモートリポジトリにプッシュできます。

リセットを元に戻す場合は、次の手順に従ってください。

まず、git reflog コマンドを実行して、リポジトリ内のすべての参照の更新を確認します。

$ git reflog

git reflog

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

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

$ git reset HEAD@{1}

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

$ git log --oneline

レポ履歴 2

私たちの HEADSixth Update に戻ってきました。

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

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

著者: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

関連記事 - Git Reset