Git でリモートリポジトリをプッシュする前にコミットを元に戻す

Azhar Bashir Khan 2022年4月12日
Git でリモートリポジトリをプッシュする前にコミットを元に戻す

このチュートリアルでは、プロジェクトディレクトリ内のファイルに加えられた変更を追跡するために使用するバージョン管理システムである Git のリモートリポジトリにプッシュされていないコミットをリセットする方法を説明します。

Git では、コミットはファイルに加えられた変更を追跡するために使用されます。場合によっては、ファイルの変更をローカルでコミットし、後でそれらの変更がもはや関連性がないと感じることがあります。

このコミットをリモートリポジトリにプッシュするのではなく、このコミットをリセットしたいと思います。git reset コマンドを使用して、まだリモートにプッシュされていないコミットをリセットするこのタスクを実行できます。

Git のリモートリポジトリにプッシュする前にコミットを元に戻す

共同開発環境で Git を使用して、ファイルに加えられた変更を追跡します。Git は、コミットを使用してファイルへの変更を追跡するというこのタスクを実行します。

ファイルに加えられた変更に満足したら、プロジェクトの Git リポジトリに変更をコミットします。基本的な Git ワークフローでは、変更をテストして完了したら、ステージング領域に変更を追加します。そのために git add コマンドを使用します。

ステージング領域に変更を追加した後、Git リポジトリに変更をコミットします。コマンド git commit を使用して変更をコミットします。

各コミットは、リポジトリの状態と名前、タイムスタンプ、およびメッセージのスナップショットを記録するために使用されます。git commit コマンドを使用して変更をコミットすると、それらの変更はローカルの Git リポジトリにコミットされます。

このローカルリポジトリは、リモート Git リポジトリに関連付けられています。次に、ローカル Git リポジトリのコミットをリモートリポジトリにプッシュします。これを実現するには、git push コマンドを使用します。

コミットをリモートリポジトリにプッシュする前に、ローカルリポジトリの現在のコミットが不要になったと感じ、それを破棄したい場合があります。

したがって、ローカルリポジトリからコミットを破棄するには、git reset コマンドを使用できます。Git リポジトリに次のようなコミット履歴があるとします。

$ git log --oneline
453dcfc (HEAD -> master) minor change
bea3aac (origin/master, origin/HEAD) some change
b14f387 Other change
...

コミット履歴では、コミット 453dcfc はローカル Git リポジトリにありますが、リモートリポジトリにはまだありません。以前のコミットもリモートリポジトリにあります。

したがって、ローカルリポジトリに存在し、まだリモートリポジトリにプッシュされていないコミットを破棄するには、次のように git reset コマンドを実行できます。

$ git reset --soft HEAD~1

上記の git reset コマンドは、現在の HEAD を 1 回のコミットでリセットします。--soft オプションを指定した git reset コマンドは、ステージング領域と作業ツリーには影響しません。

次のように、git status が示すように、変更されたすべてのファイルがコミットされる変更として保持されます。

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   README.md

これで、コミット履歴を再確認し、コミット 453dcfc が存在しなくなったことを確認できます。

$ git log --oneline
bea3aac (origin/master, origin/HEAD) some change
b14f387 Other change
...

Git のリモートリポジトリにプッシュされていないコミットをリセットする方法を示しました。

詳細については、これらのリンクをご覧ください。

  1. git-reset
  2. git reset

関連記事 - Git Reset