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/main
Git リポジトリブランチよりも進んでいることがわかります。
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 サイトをご覧ください。