2070 Stimmen

Wie verstaut man eine nicht verfolgte Datei?

Ich habe Änderungen an einer Datei und eine neue Datei und möchte git stash verwenden, um sie wegzulegen, während ich zu einer anderen Aufgabe wechsle. Aber git stash selbst speichert nur die Änderungen an der bestehenden Datei; die neue Datei verbleibt in meinem Arbeitsbaum und bringt meine zukünftige Arbeit durcheinander. Wie kann ich diese nicht verfolgte Datei auslagern?

58 Stimmen

Wenn Sie nur nicht verfolgte Dateien in Ihrem Versteck haben, sieht es so aus, als wäre es ein leeres Versteck, wie in git stash show gibt nichts zurück und man könnte versucht sein, es zu löschen (wie ich es gerade getan habe, obwohl es ein nützliches Skript enthielt, das ich vor einigen Monaten geschrieben habe wie man einen verlorenen Vorrat wiederfindet )

2968voto

sykora Punkte 88704

Um Ihr Arbeitsverzeichnis einschließlich der nicht verfolgten Dateien (insbesondere derjenigen, die sich im .gitignore ), dann sollten Sie wahrscheinlich diesen cmd verwenden:

git stash --include-untracked

Alternativ können Sie auch die Abkürzung -u 代わりに --include-untracked oder einfach git stash --all die alle Dateien, einschließlich unauffindbar y ignoriert Dateien. Dieses Verhalten wurde 2018 geändert. Stellen Sie also sicher, dass Ihr Git auf dem neuesten Stand ist.


Warnung: Es scheint (oder gab) Situationen zu geben, in denen der Inhalt von ignorierten Verzeichnissen dauerhaft gelöscht werden konnte. Weitere Informationen finden Sie auf dieser archivierten Website .

5 Stimmen

Warum speichert stash geänderte Dateien auch dann, wenn diese Änderungen nicht ausgelagert wurden?

7 Stimmen

@alan-christensen Lesen Sie die BESCHREIBUNG von kernel.org/pub/software/scm/git/docs/git-stash.html . Das Ziel ist es, nach dem Einlagern einen sauberen Arbeitsbaum zu haben.

0 Stimmen

@Kelvin neue Dateien, die nicht bereitgestellt (d.h. nicht verfolgt) wurden, werden nicht zwischengespeichert; sie bleiben im Arbeitsverzeichnis.

486voto

John Kary Punkte 6236

Ab git 1.7.7, git stash akzeptiert die --include-untracked Option (oder Kurzform -u ). Um nicht verfolgte Dateien in Ihr Versteck aufzunehmen, verwenden Sie einen der folgenden Befehle:

git stash --include-untracked
# or
git stash -u

_Warnung: Wenn Sie dies tun, werden Ihre Dateien dauerhaft gelöscht, wenn Sie ein Verzeichnis/ Einträge in Ihrer Gitignore-Datei._ *

18 Stimmen

Cool - endlich funktioniert es so, wie in der Anleitung beschrieben. Neue Dateien nicht zwischenzuspeichern (und zu bereinigen) ist ein Fehler.

1 Stimmen

Meine Version von Git ist 1.9.1 und selbst wenn das, was ich in .gitignore sieht so aus ignoredDirectory und nicht ignoredDirectory/* werden die nicht verfolgten Daten trotzdem gelöscht. Auch nicht verfolgte Dateien, nicht nur Verzeichnisse.

29 Stimmen

Können Sie bitte die Warnung erklären? Warum sollte es diese Dateien löschen? Löscht es sie und legt sie nicht ab? Ich habe Git für eine Weile benutzt und bin nicht auf dieses Problem gestoßen.

114voto

skiphoppy Punkte 89474

Fügen Sie die Datei in den Index ein:

git add path/to/untracked-file
git stash

Der gesamte Inhalt des Indexes sowie alle noch nicht vorgenommenen Änderungen an bestehenden Dateien werden in den Stash verschoben.

0 Stimmen

Was ist, wenn Sie Änderungen, die sich bereits im Index befinden, nicht zwischenspeichern möchten? Ist das Auslagern der neuen Datei trotzdem möglich?

0 Stimmen

Committen Sie den Index, speichern Sie die neue Datei und machen Sie dann den Commit rückgängig und/oder checken Sie die Dateien aus dem Commit aus. Die Lösung ist etwas umständlich, aber sie sollte funktionieren.

0 Stimmen

git add . aus irgendeinem Grund nicht in Betracht gezogen.

72voto

DolphinJava Punkte 2582

In der Git-Bash wird das Verstecken von nicht verfolgten Dateien mit dem Befehl

git stash --include-untracked
# or
git stash -u

http://git-scm.com/docs/git-stash

git stash entfernt alle nicht getrackten oder nicht übertragenen Dateien aus Ihrem Arbeitsbereich. Und Sie können git stash mit folgenden Befehlen rückgängig machen

git stash pop

Dadurch wird die Datei wieder in Ihrem lokalen Arbeitsbereich abgelegt.

Meine Erfahrung

Ich musste eine Änderung an meiner gitIgnore-Datei vornehmen, um zu verhindern, dass die .classpath- und .project-Dateien in die entfernte Repository verschoben werden. Ich darf diese geänderte .gitIgnore-Datei ab sofort nicht mehr in das entfernte Repository verschieben.

.classpath- und .project-Dateien sind wichtig für eclipse - meinen Java-Editor.

Ich habe zunächst meine restlichen Dateien selektiv hinzugefügt und für das Staging committed. Der endgültige Push kann jedoch nur durchgeführt werden, wenn die geänderten .gitIgnore-Felder und die nicht verfolgten Dateien, d. h. .project und .classpath, nicht gespeichert werden.

Ich habe

git stash

um die geänderte .gitIgnore-Datei zu speichern.

Zum Verstecken von .classpath und .project-Datei habe ich

git stash --include-untracked

und entfernte die Dateien aus meinem Arbeitsbereich. Ohne diese Dateien kann ich nicht mehr an meinem Arbeitsbereich in Eclipse arbeiten. Ich fuhr mit der Prozedur fort, um die festgeschriebenen Dateien an den Remote-Server zu übertragen. Sobald dies erfolgreich abgeschlossen war, verwendete ich

git stash pop

Dadurch wurden die gleichen Dateien wieder in meinen Arbeitsbereich eingefügt. Dadurch konnte ich wieder an demselben Projekt in Eclipse arbeiten. Ich hoffe, dies räumt Missverständnisse aus dem Weg.

3 Stimmen

Warum verwenden Sie keinen globalen Gitignore für IDE-Dateien? D. h. verwenden Sie ~/.gitignore .

2 Stimmen

Das funktioniert gut, das einzige Problem, das ich hatte, war, dass git stash show nur die geänderten Dateien aufgelistet und nicht die nicht verfolgten... anfangs dachte ich, dass ich eine Menge Arbeit verloren hätte...

29voto

user1012513 Punkte 1699

Auf Git Version 2.8.1: Folgendes funktioniert bei mir.

So speichern Sie geänderte und nicht verfolgte Dateien ohne Namen im Versteck

git stash save -u

So speichern Sie geänderte und nicht verfolgte Dateien unter einem Namen im Versteck

git stash save -u <name_of_stash>

Sie können entweder pop o anwenden. später wie folgt.

git stash pop

git stash apply stash@{0}

0 Stimmen

Dadurch wurden die nicht verfolgten Dateien nicht von meinem Computer entfernt, obwohl sie nicht mehr als nicht verfolgte Dateien aufgeführt wurden. git stash show hat sie nicht gezeigt. Als ich versuchte git stash apply Ich erhielt die Meldung "Fehler: Nicht verfolgte Dateien aus dem Versteck konnten nicht wiederhergestellt werden". Die Dateien wurden dann jedoch wieder als unverfolgt aufgelistet, aber die Änderungen an verfolgten Dateien wurden nicht wiederhergestellt. Ich denke, dass diese Dateien einzeln wiederhergestellt werden können, indem man sie aus dem Versteck auscheckt, aber diese Lösung war nicht das, was ich mir erhofft hatte.

0 Stimmen

Haben Sie den Titel dieser Frage gesehen? Sie lautet: "Wie speichert man eine nicht verfolgte Datei?". Ich habe nicht verstanden, was Sie hier zu tun versuchen. Die obige Antwort ist sehr klar für die Frage. Sie müssen git stash show -p stash@{0} verwenden, um den neuesten Stash in Form eines Patches anzuzeigen.

0 Stimmen

User1012513, ich nehme an, Ihr letzter Kommentar war an mich gerichtet. Ich stehe zu dem Kommentar, aus den angegebenen Gründen. Ich bekam einen Fehler, als ich versuchte git stash apply . Beachten Sie, dass das Hinzufügen stash@{0} sagt Git nur, dass Sie versuchen, den neuesten Stash anzuwenden, was impliziert wird, wenn es weggelassen wird, und daher nicht notwendig ist. Vielleicht hat sich seit 2018 etwas geändert, oder meine Situation ist etwas anders, aber ich dachte, die Leute sollten meine Erfahrung kennen, da sie für mich unerwartet war. Das bedeutet nicht, dass Ihre Lösung für manche Menschen nicht nützlich ist.

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