Wie entferne ich Dateien aus dem Git-Staging-Bereich?


549

Ich habe einige meiner Dateien in meinem lokalen Repo geändert und dann, wie git add -Aich glaube, zu viele Dateien zum Staging-Bereich hinzugefügt. Wie kann ich alle Dateien aus dem Staging-Bereich löschen?

Nachdem ich das getan habe, mache ich es einfach manuell git add "filename".


2
Hoffentlich suchen Sie dies: stackoverflow.com/questions/1505948/…
sumitb.mdi

27
git statussagt Ihnen bereits genau, was zu tun ist, wenn Sie Dateien entfernen möchten.
Michael Foukarakis

6
@ MichaelFoukarakis Git-Status ist nicht so hilfreich, wenn Sie ein ganzes Verzeichnis entfernen möchten, wenn es das Terminal mit Ausgabe (wie node_modules)
überflutet

2
Anstatt in Zukunft alle hinzuzufügen, möchten Sie sich vielleicht mit git add -poder vertraut machen git add --patch(sie sind gleich). Mit diesem Flag können Sie interaktiv auswählen, welche Dateien oder einzelnen Änderungen Sie bereitstellen möchten. Anschließend können Sie die Arbeit, die Sie in das Commit aufnehmen, genauer bestimmen.
Gabe

Antworten:


690

Sie können Dateien aus dem Index entfernen, indem Sie

git reset HEAD -- path/to/file

Genauso wie git addSie Dateien rekursiv nach Verzeichnis usw. entfernen können. Um alles auf einmal zu entfernen, führen Sie dies aus dem Stammverzeichnis Ihres Repositorys aus:

git reset HEAD -- .

git statusZur späteren Bezugnahme werden Ihnen in der Ausgabe von die Befehle angezeigt, die Sie ausführen müssen, um Dateien von einem Status in einen anderen zu verschieben.


5
$ git reset HEAD -- .produziert fatal: Failed to resolve 'HEAD' as a valid ref.Beachten Sie, dass ich nie ein Commit gemacht habe; Es ist das erste git addnachgit init
Patrizio Bertoni

5
Sie können auch verwenden git reset @.
Alex

@alex Ist es besser als einfach nur git reset?
Antony Hatchkins

7
@AntonyHatchkins @ist gleichbedeutend mit HEAD.
Alex

Total für mich gearbeitet, danke!
Wayneseymour

305

Verwenden

git reset

alle inszenierten Dateien zu entfernen.


3
Kann ich fragen, wie sich dies unterscheidet, git reset HEAD --oder ist es einfach eine prägnantere Art, dieselbe Operation auszuführen?
ProNotion

1
@ProNotion Reset HEADwird standardmäßig verwendet. Was ist der Zweck von denen --in Ihrem git reset HEAD --?
Antony Hatchkins

@AntonyHatchkins Es sollte ein Punkt (Punkt) folgen, der dem Beispiel in der akzeptierten Antwort entnommen wurde.
ProNotion

11
@ProNotion Entschuldigung, ich habe dich missverstanden. git reset HEAD -- .unterscheidet sich darin, dass nur Dateien im aktuellen Verzeichnis und darunter zurückgesetzt werden, während git resetalle Dateien im Projekt zurückgesetzt werden.
Antony Hatchkins

101

Wenn Sie bereits eine Reihe unerwünschter Dateien festgeschrieben haben, können Sie sie entfernen und git anweisen , sie als gelöscht zu markieren (ohne sie tatsächlich zu löschen)

git rm --cached -r .

--cachedWeist es an, die Pfade aus dem Staging und dem Index zu entfernen, ohne die Dateien selbst zu entfernen, und verarbeitet -rVerzeichnisse rekursiv. Sie können dann git addalle Dateien, die Sie verfolgen möchten.


Ich nehme an, es ist "git rm -".
Alexander Mills

1
Es gibt einen schwerwiegenden Fehler, wenn Dateien mit "git rm -" nicht entfernt werden.
Alexander Mills

@AlexMills Ich aktualisiere meine Antwort, um die tatsächlichen Optionen rmzum Aufheben der Bereitstellung aller Dateien zu erwähnen.
Max

2
Ich habe dies an einer einzelnen Datei wie dieser versucht: "git rm --cached my / file.java" und ich sehe diese Datei immer noch im Staging-Bereich, aber als gelöscht! @Max Wenn Sie diesen Befehl ausführen, werden Ihre Dateien tatsächlich gelöscht oder nur nicht bereitgestellt? Wenn Sie nicht nach diesem Verhalten suchen, würde ich mit Antwort gehen.
OrwellHindenberg

@OrwellHindenberg danke für den Hinweis! --cachedist wirklich zu stoppen, Dateien zu verfolgen, die Sie bereits festgeschrieben haben. Die Datei wird also nicht wirklich gelöscht, aber Git glaubt, dass dies der Fall ist. Ich habe dies in meiner Antwort klargestellt.
Max

30

Du könntest benutzen

git reset HEAD

Fügen Sie dann die gewünschten Dateien hinzu

git add [directory/]filename

Sie können den Parameter -x hinzufügen und ignorierte Dateien werden ebenfalls entfernt. Es ist nützlich, wenn Sie Ihren .gitignore durcheinander bringen und dort etwas Nützliches haben (wie in meinem Fall). ( git-scm.com/docs/git-clean )
Keeprock

1
Mit überschüssigen Ordnern git statuswird Ihnen das Arbeitsverzeichnis bereinigt - Lügen! git clean -dfhat diesen Job gemacht, danke.
Leo

5
Beachten Sie, dass git clean -dfDateien dauerhaft gelöscht werden. Auf UNIX-ähnlichen Systemen wird es aufgerufen unlink()und Ihre gelöschten Dateien können nicht wiederhergestellt werden.
Hanxue

11
Das OP fragt nach dem Aufheben der Bereitstellung der Dateien. Sie raten ihm, die Dateien zu löschen. Ich würde Ihnen empfehlen, vor der Beantwortung zu lesen, was der Bereitstellungsbereich ist.
Antony Hatchkins

Vielen Dank, dass Sie mein gesamtes nicht gespeichertes Projekt gelöscht haben.
Vansuita Jr.

7

Wie in anderen Antworten angegeben, sollten Sie verwenden git reset. Dies macht die Aktion des rückgängig git add -A.

Hinweis: git reset entspricht dem, git reset --mixedwas dies tut

Setzt den Index, aber nicht den Arbeitsbaum zurück (dh die geänderten Dateien werden beibehalten, aber nicht für das Festschreiben markiert) und meldet, was nicht aktualisiert wurde. Dies ist die Standardaktion. [ Git Reset ]


2
.. und um eine einzelne Datei aus dem Staging-Bereich zu entfernen , können Sie tungit reset filenameToNotCommit
SherylHohman

5

Jetzt bei v2.24.0 schlägt vor

git restore --staged .

Dateien zu entfernen.


1

Sie können den Staging-Bereich auf verschiedene Arten zurücksetzen:

  1. Setzen Sie HEAD zurück und fügen Sie alle erforderlichen Dateien zum erneuten Einchecken wie folgt hinzu:

     git reset HEAD ---> removes all files from the staging area
     git add <files, that are required to be committed>
     git commit -m "<commit message>"
     git push 
    

Was unterscheidet diese Antwort von den vorhandenen sechs Antworten?
Antony Hatchkins

1

So entfernen Sie alle Dateien aus dem Staging-Bereich: -
git reset
So entfernen Sie bestimmte Dateien:
git reset "File path"


1

verwenden

git reset HEAD

Dadurch werden alle Dateien aus dem Staging-Bereich entfernt


1

Wenn unerwünschte Dateien zum Staging-Bereich hinzugefügt, aber noch nicht festgeschrieben wurden, führt ein einfacher Reset die Aufgabe aus:

$ git reset HEAD file
# Or everything
$ git reset HEAD .

Verwenden Sie Folgendes, um nur nicht bereitgestellte Änderungen im aktuellen Arbeitsverzeichnis zu entfernen:

git checkout -- .

0

Verwenden "git reset HEAD <file>... ", um Dateien zu entfernen

Beispiel: Alle Dateien entfernen

git reset HEAD .

eine Datei entfernen

git reset HEAD nameFile.txt

-3

Ich habe all diese Methoden ausprobiert, aber keine hat bei mir funktioniert. Ich entfernte .git Datei mit rm -rf .gitdem lokalen Repository Form und dann wieder tat git initund git addund Routine Befehle. Es funktionierte.


4
Das Lesen der Git-Dokumente ist im Allgemeinen lohnender als das Befolgen der Ratschläge von xkcd.com/1597 ;)
Antony Hatchkins

1
Möglicherweise hatten Sie in Ihrem speziellen Fall ein Integritätsproblem, und dies war die verbleibende Option, die jedoch nicht empfohlen wird.
Shad

Bitte tu das nicht, du wirst dein gesamtes Git Repo zerstören.
Lennart Rolland

-5

Der beste Weg, um Ihre Datei, die sich bereits im Staging-Bereich befindet, rückgängig zu machen, ist git reset --hard, wodurch Ihre bereitgestellten Dateien zurückgesetzt werden. Vorsicht, jetzt werden abgestufte und nicht bereitgestellte Änderungen entfernt.


2
Das ist falsch und gefährlich !!! OP möchte die Dateien danach "einfach manuell wieder hinzufügen", --hardlöscht sie jedoch für immer.
Antony Hatchkins
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.