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".

47voto

Ryan Lundy Punkte 195074

Es gibt eine Möglichkeit, dieses lästige Problem zu vermeiden, wenn Sie ein neues Projekt beginnen:

  • Erstellen Sie das Hauptverzeichnis für Ihr neues Projekt.
  • ausführen. git init .
  • Erstellen Sie nun eine .gitignore-Datei (auch wenn sie leer ist).
  • Übertragen Sie Ihre .gitignore-Datei.

Git macht es wirklich schwer zu tun git reset wenn Sie keine Commits haben. Wenn Sie einen winzigen ersten Commit erstellen, nur weil Sie einen haben, können Sie danach git add -A y git reset so oft Sie wollen, um alles richtig zu machen.

Ein weiterer Vorteil dieser Methode ist, dass es einfach ist, alle Dateien zu aktualisieren, wenn Sie später Probleme mit den Zeilenenden haben:

  • Sehen Sie sich diese erste Übergabe an. Dies wird alle Ihre Dateien entfernen.
  • Prüfen Sie dann noch einmal Ihre letzte Übertragung. Dadurch werden neue Kopien Ihrer Dateien unter Verwendung Ihrer aktuellen Einstellungen für die Zeilenenden abgerufen.

1 Stimmen

Bestätigt! Ich habe einen Git-Reset nach einem Git-Add versucht und Git hat sich über einen beschädigten HEAD beschwert. Ihrem Rat folgend, konnte ich git add & reset ohne Probleme durchführen :)

1 Stimmen

Der zweite Teil funktioniert, ist aber etwas ungeschickt. Wie Zeilenenden behandelt werden, hängt ab von autocrlf Wert... Dies wird nicht in jedem Projekt funktionieren, je nach den Einstellungen.

1 Stimmen

Diese Antwort war zu dem Zeitpunkt, als sie veröffentlicht wurde, vernünftig, ist aber inzwischen überholt; git reset somefile y git reset beide vor der ersten Übergabe funktionieren, jetzt. Dies ist der Fall seit mehreren Git-Releases zurück.

45voto

powlo Punkte 2336

Beachten Sie, dass Sie, wenn Sie keine Revision angeben, ein Trennzeichen einfügen müssen. Beispiel aus meiner Konsole:

git reset <path_to_file>
fatal: ambiguous argument '<path_to_file>': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

git reset -- <path_to_file>
Unstaged changes after reset:
M    <path_to_file>

(Git-Version 1.7.5.4)

2 Stimmen

Ich habe versucht git reset <path> und es funktioniert auch ohne Trennzeichen gut. Ich verwende auch Git 1.9.0. Vielleicht funktioniert es in älteren Versionen nicht?

43voto

Kokotte23 Punkte 437

Vielleicht hat sich Git weiterentwickelt, seit Sie Ihre Frage gestellt haben.

$> git --version
git version 1.6.2.1

Jetzt können Sie es versuchen:

git reset HEAD .

Dies sollte das sein, wonach Sie suchen.

2 Stimmen

Sicher, aber dann stellt sich die Frage, wie man die Hinzufügung eines der folgenden Elemente aufheben kann zwei (oder mehr) Dateien hinzugefügt. Im "git reset"-Handbuch wird jedoch erwähnt, dass "git reset <pfade>" das Gegenteil von "git add <pfade>" ist.

39voto

Ran Punkte 7313

Um neue Dateien aus dem Bereitstellungsbereich zu entfernen (und nur, wenn es sich um eine neue Datei handelt), wie oben vorgeschlagen:

git rm --cached FILE

Verwenden Sie rm --cached nur für neue Dateien, die versehentlich hinzugefügt wurden.

4 Stimmen

Beachten Sie, dass die --cached ist hier ein wirklich wichtiger Teil.

1 Stimmen

-1; nein, dies hebt nicht die Auslagerung der Datei auf, sondern führt zu einer Löschung der Datei (ohne sie tatsächlich aus Ihrem Arbeitsbaum zu löschen).

31voto

Zorayr Punkte 21896

Um alle Dateien in einem bestimmten Ordner (und seinen Unterordnern) zurückzusetzen, können Sie den folgenden Befehl verwenden:

git reset *

5 Stimmen

Tatsächlich wird dabei nicht jede Datei zurückgesetzt, da * die Shell-Expansion verwendet und Punktdateien (und Punktverzeichnisse) ignoriert.

0 Stimmen

Sie können git status um zu sehen, ob noch etwas übrig ist, und setzen Sie es manuell zurück, d. h. git reset file .

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