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

105voto

Michael_Scharf Punkte 30896

Die Frage ist nicht klar formuliert. Der Grund dafür ist, dass git add hat zwei Bedeutungen:

  1. Hinzufügen einer neue Datei in den Bereitstellungsraum, dann rückgängig machen mit git rm --cached file .
  2. Hinzufügen einer geändert Datei in den Bereitstellungsbereich und machen Sie sie mit git reset HEAD file .

Im Zweifelsfall sollten Sie

git reset HEAD file

Weil es in beiden Fällen das Erwartete tut.

Warnung: wenn Sie es tun git rm --cached file auf eine Datei, die geändert (eine Datei, die zuvor im Projektarchiv existierte), dann wird die Datei am git commit ! Die Datei existiert zwar noch in Ihrem Dateisystem, aber wenn jemand anderes Ihren Commit abruft, wird die Datei aus deren Arbeitsbaum gelöscht.

git status wird Ihnen sagen, ob die Datei ein neue Datei o geändert :

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   my_new_file.txt
    modified:   my_modified_file.txt

9 Stimmen

+1. Eine außergewöhnliche Anzahl von hoch bewerteten Antworten und Kommentaren auf dieser Seite sind schlicht und einfach falsch in Bezug auf das Verhalten von git rm --cached somefile . Ich hoffe, dass diese Antwort auf der Seite an prominenter Stelle erscheint, um Neulinge davor zu schützen, durch falsche Behauptungen in die Irre geführt zu werden.

0 Stimmen

Eine der besten Antworten hier, leider steht sie ziemlich weit unten auf der Liste

83voto

prosoitos Punkte 5811

Aktualisierung 2019

Wie von anderen in verwandten Fragen hervorgehoben (siehe ici , ici , ici , ici , ici , ici et ici ), können Sie jetzt eine einzelne Datei aufheben mit:

git restore --staged <file>

y alle Dateien freischalten (von der Wurzel des Repos) mit:

git restore --staged .

Anmerkungen

git restore wurde eingeführt in Juli 2019 und in Version 2.23 veröffentlicht.
Mit dem --staged Flag, wird der Inhalt des Indexes wiederhergestellt (was hier gefragt ist).

Bei der Ausführung git status mit staged uncommitted file(s), dies ist nun das, was Git vorschlägt, um unstage file(s) zu verwenden (anstelle von git reset HEAD <file> wie es vor v2.23 der Fall war).

0 Stimmen

Vielen Dank für die aktualisierte Antwort. Können Sie detailliert beschreiben, wie git restore --staged . unterscheidet sich von git reset . ?

0 Stimmen

Hat dieses Thema Ihre Frage beantworten @DanDascalescu?

82voto

Rahul Sinha Punkte 1751
git reset filename.txt

entfernt eine Datei namens filename.txt aus dem aktuellen Index (auch "Staging Area" genannt, in der Änderungen, die gerade übertragen werden sollen, gespeichert werden), ohne etwas anderes zu ändern (das Arbeitsverzeichnis wird nicht überschrieben).

76voto

Ana Betts Punkte 72423

Wenn Sie bei der ersten Übertragung sind und keine git reset erklären Sie einfach den "Git-Bankrott" und löschen die .git und beginnen Sie von vorne

6 Stimmen

Ein Tipp ist, Ihre .git/config-Datei zu kopieren, wenn Sie einen entfernten Ursprung hinzugefügt haben, bevor Sie den Ordner löschen.

5 Stimmen

Der Kommentar von @ChrisJohnsen ist genau richtig. Manchmal möchte man alle Dateien außer einer übertragen: git add -A && git rm --cached EXCLUDEFILE && git commit -m 'awesome commit' (Das funktioniert auch, wenn es keine vorherigen Übertragungen gibt, re Failed to resolve 'HEAD' Problem)

55voto

Alex North-Keys Punkte 4031

Verwenden Sie git add -i um soeben hinzugefügte Dateien aus Ihrem kommenden Commit zu entfernen. Beispiel:

Hinzufügen der Datei, die Sie nicht wollten:

$ git add foo
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   foo
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
# [...]#

Interaktives Hinzufügen, um das Hinzufügen rückgängig zu machen (die Befehle, die hier bei git eingegeben werden, sind "r" (revert), "1" (erster Eintrag in der Liste, die revert anzeigt), "return", um den Modus "revert" zu verlassen, und "q" (quit):

$ git add -i
           staged     unstaged path
  1:        +1/-0      nothing foo

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> r
           staged     unstaged path
  1:        +1/-0      nothing [f]oo
Revert>> 1
           staged     unstaged path
* 1:        +1/-0      nothing [f]oo
Revert>> 
note: foo is untracked now.
reverted one path

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> q
Bye.
$

Das war's! Hier ist der Beweis dafür, dass "foo" wieder auf der Liste der nicht verfolgten Personen steht:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
# [...]
#       foo
nothing added to commit but untracked files present (use "git add" to track)
$

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