コミットされていない変更を Git で削除
-
git checkout
を使用して、Git のコミットされていない変更を削除する -
git reset
を使用して、Git のコミットされていない変更を削除する -
git stash
とgit stash
を使用して、Git のコミットされていない変更を削除する
この記事では、ローカルリポジトリに加えたコミットされていない変更を元に戻す方法について説明します。
機能を使用する場合、最初に新しいファイルを作成し、既存のファイルに変更を加えてから、いくつかのファイルを削除する場合があります。最終的に、それはすべて間違っていることに気付き、前のコミットに戻る必要があります。私たちは何をすべき?
$ echo 'Add new implementation' > feature.txt
$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ rm deprecated_feature.txt
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: file.txt
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: deprecated_feature.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
feature.txt
それを達成する方法はいくつかあります。
git checkout
を使用して、Git のコミットされていない変更を削除する
このコマンドは、追跡されたファイルのコミットされていない変更を元に戻します。追跡されたファイルは、通常、git add
によって追加された後に git が認識しているファイルです。
$ git checkout .
Updated 2 paths from the index
$ git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
feature.txt
nothing added to commit but untracked files present (use "git add" to track)
git add
を介してファイルがステージング領域にすでに追加されている場合、git checkout
は機能しないことに注意してください。
$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ git checkout file.txt
Updated 0 paths from the index
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
feature.txt
上記の例では、このファイルはステージング領域にあるため、file.txt
への変更は元に戻されません。
git reset
を使用して、Git のコミットされていない変更を削除する
ステージング領域でコミットされていない変更を削除するには、次の手順を実行する必要があります。
git reset
を使用してステージング領域からファイルをアンステージします。git checkout
を使用して変更を元に戻します。
$ git reset file.txt
Unstaged changes after reset:
M file.txt
$ git checkout file.txt
Updated 1 path from the index
$ git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
feature.txt
nothing added to commit but untracked files present (use "git add" to track)
git reset
を使用してコミットされていない変更を削除する別の方法は、オプション --hard
とパラメータ HEAD
を使用することです。
$ git reset --hard HEAD
HEAD is now at 1e087f5 Make some change to file.txt
$ git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
feature.txt
nothing added to commit but untracked files present (use "git add" to track)
--hard
オプションは、現在の状態と最後の引数のコミットの間のすべての変更をスローするように Git を指定します。そのため、このコマンドは危険であると見なされ、git status
を実行して作業ファイルを確認した後に使用する必要があります。- 最新のコミットの
HEAD
エイリアス。
git stash
と git stash
を使用して、Git のコミットされていない変更を削除する
git checkout
と git reset
の欠点は、追跡されていないファイルを削除できなかったことです。feature.txt
は、これらのコマンドを実行した後も存続します。
最初の例を考えてみましょう。
$ echo 'Add new implementation' > feature.txt
$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ rm deprecated_feature.txt
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: file.txt
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: deprecated_feature.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
feature.txt
ステージングされたファイル、追跡されているがステージングされていないファイル、および追跡されていないファイルを含む、コミットされていないすべての変更を削除します。git stash
にきちんとアプローチします。
git stash
を使用すると、変更を保存できますが、git commit
は必要ありません。コミットされていないファイルの一時ストレージとして機能します。
一時ストレージに変更を追加した後、それらが保存されているものをドロップ
するように Git に指示します。したがって、コミットされていない変更はすべてなくなります。
$ git add .
$ git stash
Saved working directory and index state WIP on main: 16b9767 deprecated_feature.txt
$ git stash drop
Dropped refs/stash@{0} (aebeb2cbdcec917331f5793ef1238f5a525d29ec)
$ git status
On branch main
nothing to commit, working tree clean
要約すると、コミットされていない変更を削除するためのいくつかのアプローチがあります。
git checkout
は、ファイルがステージング領域にない場合にのみ役立ちます。git reset
は、ステージング領域にあるが、追跡されていないファイルの変更を削除できない変更に役立ちます。git checkout
との組み合わせが必要です。git reset --hard HEAD
は上記より短い場合がありますが、潜在的に危険です。git stash
とgit add .
追跡されていないファイルを含むすべてを削除できます。