"Git add <dir>" rückgängig machen?

185

Ich habe fälschlicherweise Dateien mit dem Befehl "git add dir" hinzugefügt. Ich habe "git commit" noch nicht ausgeführt. Gibt es eine Möglichkeit, dieses Verzeichnis und alles, was darin enthalten ist, aus dem Commit zu entfernen?

Ich habe es versucht git reset dir, aber es hat nicht funktioniert. Anscheinend git reset fileist der Weg, es rückgängig zu machen. Aber ich habe so viele Dateien und so wenig Zeit.

neoneye
quelle
6
git reset <path>Aktualisiert den Index für diesen Pfad so, dass er mit HEADdem aktuellen Commit übereinstimmt . Es berührt den Arbeitsbaum nicht.
Cascabel

Antworten:

279

Um ein Verzeichnis und alles darin aus dem Index zu entfernen,

git rm --cached -r dir

Der --cachedSchalter bewirkt git rm, dass nur der Index bearbeitet wird und die Arbeitskopie nicht berührt wird. Der -rSchalter macht es rekursiv.

Aristoteles Pagaltzis
quelle
12
"Das gesamte bereitgestellte Verzeichnis aus dem Index entfernen" wäre eine etwas bessere Erklärung für den Befehl git, da der Befehl für Git-Anfänger wie mich sehr ähnlich aussieht, als könnte er sogar das Verzeichnis im Dateisystem löschen. Nur Geschmackssache.
Sascha Gottfried
1
Deshalb hatte ich den --cachedSchalter fett geschrieben . Trotzdem habe ich die Antwort so bearbeitet, dass sie nur für den Index gilt.
Aristoteles Pagaltzis
@SaschaGottfried danke für die Klarstellung, ich hatte zuerst Angst sogar mit der Bearbeitung, aber Ihr Kommentar machte es klar :)
Max von Hippel
Ich habe fast meinen gesamten Ordner gelöscht: S danach ... git reset HEAD folderalles git status folder
repariert
21

Sie werden verwenden wollen git rm --cached -r <dir>. Dieser Befehl entfernt den Inhalt des bereitgestellten Verzeichnisses aus dem Index.

Wenn das Verzeichnis bereits nachverfolgt wurde, müssen Sie neue und alte Dateien manuell suchen und sie entfernen.

Führen Sie wahrscheinlich git reset <dir>danach aus, um vorhandene (und bereits verfolgte) Dateien im Verzeichnis zurückzusetzen.


Update 2019:

Einfach ausführen git reset directory, alle neu hinzugefügten Dateien werden entfernt.

stricken
quelle
ist nicht git reset <dir>alleine genug?
Bananach
@ Bananach Ich habe es gerade versucht und es scheint, dass ja git reset <dir>auch funktionieren würde. Die Antwort stammt aus dem Jahr 2011, daher bin ich mir nicht sicher, ob das bereits vor 8 Jahren funktioniert hat. Ich werde die Antwort aktualisieren. Danke für den Tipp!
Knittl
11

Verwenden Sie findund xargs:

find dir -type f | xargs git reset
Moinudin
quelle
11

Unstage-Verzeichnis

$ git reset <dir>

Stellt alle Dateien und Ordner bereit, mit denen ich bereitgestellt habe:

$ git add <dir>

Bestätigen Sie das nicht bereitgestellte Verzeichnis

Führen Sie die folgenden Schritte aus, um das Entfernen des Verzeichnisses und seines Inhalts aus dem Staging zu bestätigen (dh "Zu übernehmende Änderungen"):

$ git status

oder

$ git diff --staged --name-only 

um zu bestätigen, dass keiner der zuvor bereitgestellten Ordner oder Dateien noch bereitgestellt wird.

mrduncle1
quelle
2

Ein einfacher Befehl zum Entfernen einer bereitgestellten Datei / eines bereitgestellten Ordners, der noch nicht festgeschrieben ist, lautet - git restore --staged <dir>.

Geben Sie hier die Bildbeschreibung ein

Tofan Jena
quelle