11450 Stimmen

Wie kann ich "git add" vor der Übertragung rückgängig machen?

Ich habe versehentlich Dateien mit dem Befehl zu Git hinzugefügt:

git add myfile.txt

Ich habe noch nicht ausgeführt git commit . Gibt es eine Möglichkeit, dies rückgängig zu machen, so dass diese Dateien nicht in die Übertragung aufgenommen werden?

57 Stimmen

Beginnend mit Git v1.8.4 werden alle folgenden Antworten, die HEAD o head können nun @ anstelle von HEAD stattdessen. Siehe diese Antwort (letzter Abschnitt) um zu erfahren, warum Sie das tun können.

5 Stimmen

Ich habe eine kleine Übersicht erstellt, die alle Möglichkeiten zum Aufheben einer Datei zeigt: stackoverflow.com/questions/6919121/

8 Stimmen

Wenn Sie Eclipse verwenden, ist es so einfach wie das Entfernen der Markierung der Dateien im Dialogfeld "Übertragen".

189voto

Alireza Punkte 92209

Rückgängig machen eine bereits hinzugefügte Datei ist mit Git recht einfach. Zum Zurücksetzen myfile.txt , die bereits hinzugefügt wurden, verwenden:

git reset HEAD myfile.txt

Erläuterung:

Nachdem Sie unerwünschte Datei(en) bereitgestellt haben, können Sie den Vorgang rückgängig machen, indem Sie git reset . Head ist der Kopf der Datei im lokalen Verzeichnis und der letzte Parameter ist der Name der Datei.

Ich habe die Schritte in der Abbildung unten für Sie ausführlicher dargestellt, einschließlich aller Schritte, die in diesen Fällen auftreten können:

git reset HEAD file

0 Stimmen

Bild: "Der Befehl add..." "Der Befehl fügt..." ( Präsens, einfache Form, dritte Person )

0 Stimmen

Bild: will wollen (es ist nicht nötig, hier Slang zu verwenden)

127voto

sjas Punkte 16831

Git hat Befehle für jede erdenkliche Aktion, aber es erfordert umfangreiches Wissen, um die Dinge richtig zu machen und ist daher bestenfalls kontra-intuitiv...

Was Sie vorher gemacht haben:

  • Eine Datei geändert und verwendet git add . , oder git add <file> .

Was Sie wollen:

  • Entfernen Sie die Datei aus dem Index, aber lassen Sie sie versioniert und mit den nicht übertragenen Änderungen in der Arbeitskopie stehen:

     git reset HEAD <file>
  • Setzt die Datei auf den letzten Stand von HEAD zurück, macht Änderungen rückgängig und entfernt sie aus dem Index:

     # Think `svn revert <file>` IIRC.
     git reset HEAD <file>
     git checkout <file>
    
     # If you have a `<branch>` named like `<file>`, use:
     git checkout -- <file>

    Dies ist erforderlich, da git reset --hard HEAD funktioniert nicht mit einzelnen Dateien.

  • entfernen <file> von Index und Versionierung, wobei die nicht versionierte Datei mit den Änderungen in der Arbeitskopie bleibt:

     git rm --cached <file>
  • entfernen <file> von der Arbeitskopie und der Versionierung vollständig zu trennen:

     git rm <file>

2 Stimmen

Ich kann den Unterschied zwischen "git reset head <Datei>" und "git rm --cached <Datei>" nicht nachvollziehen. Könnten Sie mir das erklären?

9 Stimmen

@jeswang Dateien sind entweder Git "bekannt" (Änderungen an ihnen werden verfolgt), oder sie sind nicht "versioniert". reset head macht Ihre aktuellen Änderungen rückgängig, aber die Datei wird weiterhin von Git überwacht. rm --cached nimmt die Datei aus der Versionierung heraus, so dass Git sie nicht mehr auf Änderungen überprüft (und entfernt auch eventuell indizierte aktuelle Änderungen, die Git durch die vorherige add ), aber die geänderte Datei bleibt in Ihrer Arbeitskopie, also in Ihrem Dateiordner auf der Festplatte, erhalten.

4 Stimmen

Der Unterschied ist git reset HEAD <file> ist temporär - der Befehl wird erst bei der nächsten Übertragung angewendet, aber git rm --cached <file> wird unstage, bis es wieder hinzugefügt wird mit git add <file> . Auch, git rm --cached <file> bedeutet, dass, wenn Sie diesen Zweig auf das Remote-System übertragen, jeder, der den Zweig abruft, die Datei WIRKLICH aus seinem Ordner gelöscht bekommt.

118voto

braitsch Punkte 13754
git rm --cached . -r

wird alles, was Sie aus dem aktuellen Verzeichnis hinzugefügt haben, rekursiv "zurücknehmen

5 Stimmen

Ich wollte nicht alles entfernen, sondern nur EINE bestimmte Datei.

4 Stimmen

Auch hilfreich, wenn Sie keine früheren Übertragungen haben. In Ermangelung eines vorherigen Commits, git reset HEAD <file> würde sagen fatal: Failed to resolve 'HEAD' as a valid ref.

10 Stimmen

Nein, das fügt hinzu. a Löschung von allem in Ihrem aktuellen Verzeichnis. Das ist etwas ganz anderes als das bloße Aufheben von Änderungen.

108voto

electblake Punkte 1897

Wie in vielen anderen Antworten beschrieben, können Sie Folgendes verwenden git reset

ABER:

Ich habe diesen großartigen kleinen Beitrag gefunden, der den Git-Befehl (nun ja, einen Alias) für git unadd : siehe git unadd für Details oder

Einfach,

git config --global alias.unadd "reset HEAD"

Jetzt können Sie

git unadd foo.txt bar.txt

Alternativ / direkt:

git reset HEAD foo.txt bar.txt

1 Stimmen

Das ist eine großartige Antwort!

107voto

Khaja Minhajuddin Punkte 6433

Ausführen.

git gui

und entfernen Sie alle Dateien manuell oder indem Sie alle Dateien markieren und auf die Schaltfläche unstage von commit Taste.

2 Stimmen

Ja, das verstehe ich. Ich wollte nur implizit vorschlagen, dass Sie in Ihrer Antwort darauf hinweisen, wie "Sie können git-gui ...." :)

2 Stimmen

Er sagt: "git-gui: Befehl nicht gefunden". Ich bin nicht sicher, ob das funktioniert.

0 Stimmen

Wow, das ist viel einfacher als die Befehlszeilen, die man nicht versteht. Für einen Anfänger wie mich ist das auf jeden Fall empfehlenswert. Danke, dass Sie das aufgeschrieben haben!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X