「git add <dir>」を元に戻しますか?


186

コマンド「git add dir」を使用して誤ってファイルを追加しました。「git commit」はまだ実行していません。このディレクトリとそれに含まれるすべてのものをコミットから削除する方法はありますか?

私は試しましたgit reset dirが、うまくいきませんでした。どうやらgit reset fileそれを元に戻す方法です。しかし、私は非常に多くのファイルと非常に短い時間を持っています。


6
git reset <path>一致するようにHEAD(現在のコミット)、そのパスのインデックスを更新します。作業ツリーには触れません。
Cascabel、2011年

回答:


279

ディレクトリとその中のすべてをインデックスから削除するには、

git rm --cached -r dir

--cachedスイッチになりはgit rm過ぎず、作業コピーに触れ指数で動作します。-rスイッチは、それが再帰的になります。


12
「ステージングされたディレクトリ全体をインデックスから削除すること」は、gitコマンドの少し良い説明になります。私のようなgit初心者にとって、コマンドはファイルシステム上のディレクトリを削除することさえできるように見えるからです。好みの問題。
Sascha Gottfried

1
そのため、--cachedスイッチを太字にしました。それにもかかわらず、私はそれがインデックスにのみ適用されることを修飾するために答えを編集しました。
アリストテレスPagaltzis 2013

@SaschaGottfried明確化に感謝します。編集していても最初は怖かったですが、あなたのコメントはそれを明確にしました:)
Max von Hippel

私はほぼすべてのフォルダーを削除しました:Sこの後... git reset HEAD folderすべてを修正しました...しかし、これを行う前に、を実行しgit status folder、そのフォルダー上のすべてのファイルを「削除」したことを確認してください
Bengalaa

21

使いたくなるでしょうgit rm --cached -r <dir>。このコマンドは、ステージングされたディレクトリの内容をインデックスから削除します。

ディレクトリがすでに追跡されている場合は、新しいファイルと古いファイルを手動で見つけてステージングを解除する必要があります…

おそらくgit reset <dir>その後に実行され、ディレクトリ内の既存の(そしてすでに追跡されている)ファイルをリセットします。


アップデート2019:

単に実行するとgit reset directory、新しく追加されたすべてのファイルのステージが解除されます。


ではないgit reset <dir>だけでは十分では?
バナナッチ

@Bananach私が試したところ、はい、git reset <dir>うまくいくようです。答えは2011年なので、それが8年前にすでに機能していたかどうかはわかりません。答えを更新します。ヒントをありがとう!
knittl


11

アンステージディレクトリ

$ git reset <dir>

私がステージングしたすべてのファイルとフォルダーをアンステージングします:

$ git add <dir>

ステージングされていないディレクトリを確認

ステージングからのディレクトリとそのコンテンツの削除を確認するには(つまり、「コミットする変更」)、以下を実行します。

$ git status

または

$ git diff --staged --name-only 

以前にステージングされたフォルダーまたはファイルがまだステージングされていないことを確認します。


2

まだコミットされていない、ステージングされたファイル/フォルダーを削除する単純なコマンドの1つは- git restore --staged <dir>です。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.