Wie entferne ich eine einzelne Datei aus dem Staging-Bereich (git add rückgängig machen)?

StackOverflow https://stackoverflow.com/questions/1505948

  •  19-09-2019
  •  | 
  •  

Frage

Situation: Ich habe eine Git-Repository mit Dateien, die bereits im Index. Ich Änderungen an mehreren Dateien, öffnen Git und fügen Sie diese Dateien auf meinem Staging-Bereich mit „git add.“

Frage: Wie entferne ich eine dieser Dateien aus dem Staging-Bereich, aber nicht aus dem Index entfernen oder die Änderungen an der Datei selbst rückgängig machen

War es hilfreich?

Lösung

Wenn ich die Frage richtig verstanden habe, wollen Sie einfach auf „Rückgängig“ die git add, die für diese Datei durchgeführt wurde.

Wenn Sie eine einzelne Datei aus dem Staging-Bereich zu entfernen, verwenden Sie

git reset HEAD -- <file>

Wenn Sie einen ganzes Verzeichnis (Ordner) aus dem Staging-Bereich zu entfernen, verwenden Sie

git reset HEAD -- <directoryName>

Ihre Änderungen werden beibehalten. Beim Ausführen von git status die Datei erneut zeigt, wird als modifizierte, aber noch nicht in Szene gesetzt.

Sehen Sie die git reset Manpage .

Andere Tipps

git rm --cached FILE

git rm -r --cached CVS */CVS

git reset <file>

Funktioniert, ob Sie alle vorherigen Commits haben.

So eine leichte zwicken Tim Henigan Antwort: Sie verwenden müssen - vor dem Dateinamen. Es würde wie folgt aussehen:

git reset HEAD -- <file>
git reset filename.txt

Wenn Sie eine Änderung in filename.txt haben, kannst du es versehentlich auf die Bühne, und Sie möchten die Datei entfernen von Staging, aber Sie wollen nicht um die Änderungen zu verlieren.

Falls Sie nur eine Teilmenge der Änderungen an der Datei zu entfernen, können Sie:

git reset -p

oder

git reset -p <file_name>

Dieser Befehl ist im Grunde das Gegenteil von git add -p: es wird nur die ausgewählten Änderungen aus dem Staging-Bereich entfernen. Ich finde es sehr nützlich in „unadding“ etwas, das ich versehentlich hinzugefügt.

Wenn Sie Dateien möchten nach einem bestimmten Muster entfernen, und Sie verwenden git rm --cached, können Sie Datei-Glob-Muster verwenden.

Siehe hier .

Sie mögen:

  • Affekt zu einer einzigen Datei

  • Datei löschen Staging-Bereich

  • Nicht einzelne Datei aus dem Index entfernen

  • Sie rückgängig die Änderung nicht selbst

, und die Lösung ist

git reset HEAD file_name.ext

oder

git reset HEAD path/to/file/file_name.ext

Wenn Sie git status tun, Git sagt Ihnen, wie man unstage:

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

So git reset HEAD <file> für mich gearbeitet und die Veränderungen waren un-berührt.

Wenn Sie Änderungen an viele getrackten Dateien zu machen, sondern wollen nur ein paar von ihnen auf die Bühne, tun ein

git add .

ist nicht immer günstig (oder empfohlen.) - wie es die Stufen alle verfolgten Dateien (einige Fälle, wo Sie wollen sich nur Änderungen halten und wollen sie nicht an das Remote-Repository Stufe)

noch ist es ideal, um eine Reihe von

tun

git add path/to/file1 path/to/file2

Wenn Sie eine Menge von verschachtelten Verzeichnissen (das ist der Fall in den meisten Projekten ist) - nervt

Das ist, wenn Git GUI hilfreich (wahrscheinlich nur, wenn ich es verwenden) ist. Öffnen Sie einfach Git GUI, zeigt es inszeniert und unstaged Dateiabschnitte. Wählen Sie die Dateien aus dem inszenierten Abschnitt, den Sie wollen unstage und drücken Sie

  

Ctrl+U (für Windows)

sie unstage.

Ich glaube, Sie haben es wahrscheinlich mit dem Begriff der verwirrt Index , wie @CB Bailey, kommentierte:

  

Der Staging-Bereich ist der Index.

Sie können einfach betrachten Staging-Verzeichnis und Index als die gleiche Sache.
So, wie @ Tim Henigan Antwort , ich denke:

  

Sie einfach auf „rückgängig machen“ wollen die git add, die für diese Datei durchgeführt wurde.


Hier ist meine Antwort:

Im Allgemeinen gibt es zwei Möglichkeiten, um eine Bühne Vorgang rückgängig zu machen, wie andere Antworten bereits erwähnt:

git reset HEAD <file>

und

git rm --cached <file>

Aber was ist der Unterschied?

die Datei Angenommen wurde statt und existiert in Arbeitsverzeichnis Auch Verwendung git rm --cached <file> wenn Sie es von Staging-Verzeichnis entfernen möchten, und halten Sie die Datei in Arbeitsverzeichnis . Aber beachten Sie, dass dieser Vorgang wird nicht nur die Datei entfernen von Staging-Verzeichnis , sondern markiert auch die Datei als deleted in Staging-Verzeichnis , wenn Sie verwenden

git status

nach dieser Operation, werden Sie sehen:

        deleted:    <file>

Es ist eine Aufzeichnung, die Datei zu entfernen, von Staging-Verzeichnis . Wenn Sie nicht wollen, diesen Rekord zu halten und einfach nur wollen, anstatt eine frühere Stufe Betrieb einer Datei verwenden Sie git reset HEAD <file> rückgängig zu machen.


-------- ENDE DER ANTWORT --------

PS: Ich habe bemerkt, einige Antworten erwähnt:

git checkout -- <file>

Dieser Befehl ist für die Situation, wenn die Datei wird inszeniert , aber die Datei in Arbeitsverzeichnis wurde geändert , nachdem es inszeniert wurde, verwenden Sie diesen Vorgang der Wiederherstellung Datei in Arbeitsverzeichnis Staging-Verzeichnis . Mit anderen Worten, nach dieser Operation, passieren Veränderungen in Ihrem Arbeitsverzeichnis , nicht Staging-Verzeichnis .

Sie müssen in dem Verzeichnis der Datei sein und dann den folgenden in das Terminal eingeben

git reset HEAD .

Annahme ist, dass Sie nur eine Datei zurückgesetzt werden.

Um alles auf einmal unstage, diesen Befehl ausführen

git reset HEAD -- .

git checkout -- <file>

Es funktioniert perfekt Dateien zu entfernen, von Bereitstellungszone

In meinem Fall ich

git checkout -- FILE
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top