Git でプッシュされていないコミットを削除する

Azhar Bashir Khan 2022年12月26日
Git でプッシュされていないコミットを削除する

このチュートリアルでは、Git でプッシュされていないコミットを削除する方法を説明します。

Git は、プロジェクトディレクトリ内のファイルに加えられた変更を追跡するために、共同開発環境で使用されます。Git はコミットを使用して、ローカルとリモートの両方の Git リポジトリの変更を追跡します。

プッシュされていないコミットをローカル Git リポジトリから時々削除したい場合があります。

git reset コマンドを使用して、プッシュされていないコミットを削除します。これを例で説明します。

Git で git reset コマンドを使用してプッシュされていないコミットを削除する

プロジェクトディレクトリへの変更をコミットするときはいつでも、git add および git commit コマンドを使用して変更をコミットできます。

git commit コマンドを使用すると、ローカル Git リポジトリにコミットが作成されます。次に、git push コマンドを使用して、ローカル Git リポジトリ内のコミットをリモート Git リポジトリにプッシュできます。

場合によっては、コミットをリモートリポジトリにプッシュしたくなく、ローカルリポジトリにコミットしたばかりであることに気付くことがあります。このような場合、git reset コマンドを使用して、ローカル Git リポジトリ内の最後のコミットを解除または削除できます。

git reset は、Git リポジトリの状態に対するローカルの変更を元に戻すために使用されるコマンドです。

作業ディレクトリに変更があるとします。git status コマンドで変更のステータスを表示できます。

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

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)
        modified:   mynotes.txt

mynotes.txt ファイルが変更され、コミットの対象になっていることがわかります。

変更をコミットするには、最初に git add コマンドを使用して、ローカル Git リポジトリのステージングインデックスに変更を追加する必要があります。次のように git add コマンドを実行する必要があります。

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

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

したがって、git status コマンドを使用すると、変更がステージングされていることがわかります。

ローカルの Git リポジトリに変更をコミットできます。段階的な変更のコミットを作成するには、git commit コマンドを使用する必要があります。

次のように git commit コマンドを実行します。

$ git commit -m "updated mynotes"
[main e1b08a5] updated mynotes
 1 file changed, 1 insertion(+)

ここで、git status コマンドを再度実行して、ステータスを確認します。

$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

これで、ローカルリポジトリ内のローカルブランチが、1 回のコミットでリモートの origin/mainGit リポジトリブランチよりも進んでいることがわかります。

git push コマンドを使用して、コミットをリモート Git リポジトリにプッシュできます。ただし、その代わりに、次のように git reset コマンドを使用してプッシュされていないコミットを削除します。

$ git reset --soft HEAD~1

--soft オプションを指定した git reset コマンドは、プッシュされていないコミットをローカル Git リポジトリから削除しますが、ローカルの変更は保持します。HEAD~1 は、最後のコミットを 1つだけ削除する git reset コマンドを指定します。

次に、git status を実行して、リポジトリのステータスを次のように確認します。

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

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

したがって、プッシュされていないコミットが存在しなくなっていることがわかります。ただし、変更はまだ段階的です。

git reset コマンドで --soft コマンドオプションの代わりに --hard オプションを使用すると、HEAD~1 で指定された最近のコミットが削除され、ローカルで変更が行われました。

--hard オプションを指定して git reset コマンドを実行できます。

$ git reset --hard HEAD~1

これにより、追跡された変更とともに、追跡されていないファイルまたはディレクトリも削除されます。したがって、注意して使用してください。そうしないと、実行したすべての作業が失われる可能性があります。

したがって、ローカル Git リポジトリ内のプッシュされていないコミットを削除することを学びました。

詳細については、次の Web サイトをご覧ください。

  1. git-reset
  2. git reset

関連記事 - Git Reset