• TOP
  • 記事一覧
  • Gitで本番環境をひとつ前のコミットに戻す方法「Reset current branch to this Commit…」

Gitで本番環境をひとつ前のコミットに戻す方法「Reset current branch to this Commit…」

更新日:2025/02/25

本番サーバーでmaster originをpullしたところ、何らかの不具合が発生してしまいました。急いで元の状態に戻すときの手順の参考に!

以下の手順で本番環境を前のコミットに戻すことができます。

問題発生と復旧計画 本番サーバー master ⚠️不具合発生 ローカル環境 master リモート origin/master A B C 以前の安定状態 D 問題のコミット 復旧計画: コミットCの状態に戻す ローカル → リセット → リモートプッシュ → 本番pull

1. ローカル環境での操作

まず、ローカル環境でこれから行う作業:

  1. masterブランチに切り替え
  2. Gitの操作メニューから「Reset current branch to this Commit…」を選択
  3. 戻したい安定版のコミット(不具合発生前のコミット)を選択
  4. これでローカルのmasterブランチは指定したコミットの状態に戻ります
ローカル環境での復旧作業 ローカル環境 master リセット完了 本番サーバー master ⚠️不具合状態 リモート origin/master 未更新 Git操作メニュー Reset current branch to this Commit… Copy Commit Hash to Clipboard Copy Commit Subject to Clipboard A B C 選択中 D 問題のコミット ローカル操作 コミットCに戻すために リセットを実行
ローカル環境での復旧作業 ローカル環境 master Git操作メニュー Reset current branch to this Commit… Copy Commit Hash to Clipboard Copy Commit Subject to Clipboard A B C 選択中 D 問題のコミット ローカル操作 「Reset current branch to this Commit…」を選択し、 コミットCの状態にmasterブランチをリセット

2. リモートリポジトリへの反映

次に、変更をリモートに反映します:

# 必要であれば変更をコミット
git commit -m "Revert to previous stable version"

# リモートのmasterブランチに強制プッシュ
git push -f origin master
リモート更新と本番環境への反映 本番サーバー master ✅復旧完了 ローカル環境 master リセット済 リモート origin/master 更新済 1. git push -f 2. fetch & pull A B C 復旧した状態 D 削除されたコミット 復旧完了フロー 1. ローカル環境からリモートリポジトリへ強制プッシュ 2. 本番環境でfetchとpullを実行 3. 本番環境がコミットCの状態に復旧完了

強制プッシュ(-f)は通常の操作ではあまり推奨されませんが、今回のように問題を修正するためには必要な操作です。

3. 本番環境での反映

最後に、本番環境で以下のコマンドを実行:

# 最新の変更情報を取得
git fetch origin

# 変更を適用
git pull origin master

これで本番環境は指定したコミットの状態に戻り、不具合は解消されるはずです。

注意点

  • この方法はリポジトリの履歴を書き換えるため、チームでの作業時は他のメンバーに必ず通知しましょう
  • 強制プッシュは慎重に行い、本当に必要な場合のみ使用しましょう
  • 問題解決後は、不具合の原因を特定して適切に修正することも重要です

このようにGitを使えば、不具合が発生した場合でも素早く元の状態に戻すことができます。

「Reset current branch」と「Rebase current branch」

Reset current branch(ブランチのリセット):

  • 現在のブランチの状態を指定したコミットに強制的に戻します
  • 指定したコミット以降の変更履歴が完全に削除されます(git reset --hardの場合)
  • 履歴が書き換えられるため、他の開発者と共有しているブランチでは注意が必要です
  • 主に「間違えた変更を完全に取り消したい」場合に使用します

Rebase current branch(ブランチのリベース):

  • コミット履歴を再構成する操作です
  • 指定したブランチやコミットの上に、現在のブランチのコミットを「積み直す」操作です
  • 元のコミットは残りませんが、各コミットの内容(変更内容)は維持されます
  • 履歴を整理してよりクリーンにする目的で使用します
  • ブランチの分岐点を変更することで、マージ時の競合を減らす目的でも使用されます

例えばコミットA→B→C→Dがあって、Cに戻したい場合:

  • Reset: Dが完全に削除され、Cの状態に戻ります
  • Rebase: DをCの内容に基づいて再適用し、新しいD’が作られます
Reset と Rebase の違い 初期状態 A B C D 問題のコミット HEAD (master) Reset操作後 A B C D HEAD (master) 問題のコミットDが削除される Rebase操作後 A B C D’ HEAD (master) コミットDがCの上に再適用される 比較 Reset: コミットを完全に削除し、履歴を巻き戻す Rebase: コミットを再構成し、変更内容は保持する
人気記事ランキング
話題のキーワードから探す