Ich habe Änderungen an einer Datei sowie eine neue Datei und möchte Git Stash verwenden, um sie zu entfernen, während ich zu einer anderen Aufgabe wechsle. Aber git stash selbst verwahrt nur die Änderungen an der vorhandenen Datei. Die neue Datei verbleibt in meinem Arbeitsbaum und überfüllt meine zukünftige Arbeit. Wie verstecke ich diese nicht verfolgte Datei?
1437
git stash show
nichts zurückgibt und Sie möglicherweise versucht sind, sie zu löschen (wie ich es gerade getan habe, als sie ein nützliches Skript enthielt, das ich vor einigen Monaten geschrieben habe → wie man einen abgelegten Vorrat wiederherstellt )Antworten:
Um Ihr Arbeitsverzeichnis einschließlich nicht verfolgter Dateien (insbesondere der im .gitignore) zu speichern, möchten Sie wahrscheinlich dieses cmd verwenden:
git stash --include-untracked
Mehr Details:
Update 17. Mai 2018:
Neue Versionen von git haben jetzt
git stash --all
alle Dateien, einschließlich nicht verfolgter und ignorierter Dateien.git stash --include-untracked
Berührt ignorierte Dateien nicht mehr (getestet unter Git 2.16.2).Ursprüngliche Antwort unten:
Warnung: Wenn Sie dies tun, werden Ihre Dateien dauerhaft gelöscht, wenn Ihre gitignore-Datei Verzeichnis- / * -Einträge enthält.
Ab Version 1.7.7 können Sie nicht verfolgte Dateien verwenden
git stash --include-untracked
odergit stash save -u
speichern, ohne sie bereitzustellen.Fügen Sie
git add
die Datei hinzu ( ) und beginnen Sie, sie zu verfolgen. Dann verstauen. Da der gesamte Inhalt der Datei neu ist, werden sie gespeichert, und Sie können sie nach Bedarf bearbeiten.quelle
git stash --include-untracked
zuvorgit stash --all
in Ihrer Antwort aufzulisten. Erstens beantwortet es die Frage des OP jetzt im Jahr 2019 besser und zweitens, weil - alles etwas tut, was die meisten Benutzer wahrscheinlich nicht wollen, indem es alle Dateien entfernt, die .gitignored sindAb Git 1.7.7 wird
git stash
die--include-untracked
Option (oder Short-Hand-u
) akzeptiert . Verwenden Sie einen der folgenden Befehle, um nicht verfolgte Dateien in Ihren Vorrat aufzunehmen:Warnung: Wenn Sie dies tun, werden Ihre Dateien dauerhaft gelöscht, wenn Ihre gitignore-Datei Verzeichnis- / * -Einträge enthält.
quelle
.gitignore
aussiehtignoredDirectory
und nichtignoredDirectory/*
, löscht es immer noch die nicht verfolgten. Auch nicht verfolgte Dateien nicht nur Verzeichnisse.*.extension
Einträge?git
1.8.3-u
(--include-untracked
) Option kann nicht verfolgte Dateien in Ordnung verstauen und einfügen, abergit stash show
nicht die nicht verfolgten DateienFügen Sie die Datei dem Index hinzu:
Der gesamte Inhalt des Index sowie alle nicht bereitgestellten Änderungen an vorhandenen Dateien werden in den Stash aufgenommen.
quelle
git add .
In Git Bash wird das Verstauen von nicht verfolgten Dateien mithilfe des Befehls erreicht
oder
http://git-scm.com/docs/git-stash
git stash entfernt nicht verfolgte oder nicht festgeschriebene Dateien aus Ihrem Arbeitsbereich. Und Sie können Git Stash mit den folgenden Befehlen zurücksetzen
Dadurch wird die Datei wieder in Ihrem lokalen Arbeitsbereich abgelegt.
Meine Erfahrung
Ich musste eine Änderung an meiner gitIgnore-Datei vornehmen, um zu vermeiden, dass .classpath- und .project-Dateien in das Remote-Repo verschoben werden. Ich darf diese modifizierte .gitIgnore ab sofort nicht mehr in Remote Repo verschieben.
.classpath- und .project-Dateien sind wichtig für Eclipse - das ist mein Java-Editor.
Ich habe zunächst selektiv meine restlichen Dateien hinzugefügt und mich für die Bereitstellung verpflichtet. Der endgültige Push kann jedoch nur ausgeführt werden, wenn die modifizierten .gitIgnore-Felder und die nicht verfolgten Dateien vorhanden sind. .project und .classpath sind nicht versteckt.
ich benutzte
zum Verstecken der geänderten .gitIgnore-Datei.
Zum Verstauen von .classpath- und .project-Dateien habe ich verwendet
und es entfernte die Dateien aus meinem Arbeitsbereich. Das Fehlen dieser Dateien beeinträchtigt meine Fähigkeit, an meinem Arbeitsort in Eclipse zu arbeiten. Ich fuhr mit dem Abschluss des Verfahrens zum Übertragen der festgeschriebenen Dateien auf Remote fort. Sobald dies erfolgreich durchgeführt wurde, habe ich verwendet
Dadurch wurden dieselben Dateien wieder in meinen Arbeitsbereich eingefügt. Dies gab mir meine Fähigkeit zurück, in Eclipse an demselben Projekt zu arbeiten. Hoffe, dies beseitigt Missverständnisse.
quelle
~/.gitignore
.Wie bereits an anderer Stelle erwähnt, lautet die Antwort auf
git add
die Datei. z.B:Die Frage wird jedoch auch in einer anderen Antwort aufgeworfen: Was ist, wenn Sie die Datei nicht wirklich hinzufügen möchten? Soweit ich das beurteilen kann, müssen Sie. Und der folgende Wille NICHT funktionieren:
Dies wird wie folgt fehlschlagen:
Also was kannst du tun? Nun, Sie müssen die Datei wirklich hinzufügen, aber Sie können sie später effektiv mit hinzufügen
git rm --cached
:Und dann können Sie weiterarbeiten, in dem Zustand, in dem Sie vor dem waren
git add
(nämlich mit einer nicht verfolgten Datei namenspath/to/untracked-file
; plus allen anderen Änderungen, die Sie möglicherweise an den verfolgten Dateien vorgenommen haben).Eine andere Möglichkeit für einen Workflow dazu wäre etwa:
[Hinweis: Wie in einem Kommentar von @mancocapac erwähnt, möchten Sie möglicherweise hinzufügen
--exclude-standard
dengit ls-files
Befehl (also,git ls-files -o --exclude-standard
) .]... was auch leicht skriptfähig sein könnte - sogar Aliase würden ausreichen (in zsh-Syntax dargestellt; nach Bedarf anpassen) [außerdem habe ich den Dateinamen gekürzt, damit alles auf den Bildschirm passt, ohne in dieser Antwort zu scrollen; Fühlen Sie sich frei, einen alternativen Dateinamen Ihrer Wahl zu ersetzen]:
Beachten Sie, dass diese vielleicht besser als ein Shell - Skript oder eine Funktion, Parameter zu ermöglichen, geliefert werden soll
git stash
, falls Sie nicht wollen ,pop
aberapply
, und / oder wollen eine bestimmte Stash in der Lage sein zu spezifizieren, anstatt nur die Spitze nehmen einer. Vielleicht dies (anstelle des zweiten Alias oben) [Leerzeichen ohne Scrollen entfernt; zur besseren Lesbarkeit erneut hinzufügen]:Hinweis : In diesem Formular müssen Sie ein Aktionsargument sowie den Bezeichner angeben, wenn Sie einen Stash-Bezeichner angeben möchten, z. B.
unstashall apply stash@{1}
oderunstashall pop stash@{1}
Welches würden Sie natürlich in Ihre setzen
.zshrc
oder ein gleichwertiges einfügen würden, um langfristig zu existieren.Hoffentlich ist diese Antwort für jemanden hilfreich, der alles in einer Antwort zusammenfasst.
quelle
Auf Git Version 2.8.1: Folgendes funktioniert für mich.
So speichern Sie geänderte und nicht verfolgte Dateien im Stash ohne Namen
Speichern von geänderten und nicht verfolgten Dateien im Stash mit einem Namen
Sie können entweder Pop verwenden oder später wie folgt anwenden .
quelle
git stash show
zeigte sie nicht. Als ich es versuchtegit stash apply
, bekam ich "Fehler: Nicht verfolgte Dateien konnten nicht aus dem Stash wiederhergestellt werden". Die Dateien wurden dann jedoch erneut als nicht verfolgt aufgeführt, aber Änderungen an verfolgten Dateien wurden nicht wiederhergestellt. Ich denke, diese Dateien könnten einzeln wiederhergestellt werden, indem sie aus dem Vorrat ausgecheckt werden, aber diese Lösung war nicht das, was ich mir erhofft hatte.Ich konnte nur die nicht verfolgten Dateien verstauen , indem ich Folgendes tat:
Beim letzten wird der Speicher der verfolgten Dateien geöffnet, sodass nur die nicht verfolgten Dateien gespeichert werden.
quelle
git stash save -u
speichert nicht nur dieuntracked
Dateien, sondern auch dietracked
unduntracked
. Ich denke, die erste Rettung, die Sie machen, ist in diesem Fall nicht notwendig. Es gibt ein gutes Diagramm in atlassian.com/git/tutorials/saving-changes/…Wenn Sie nicht verfolgte Dateien speichern möchten, aber indizierte Dateien behalten möchten (die Sie beispielsweise festschreiben möchten), fügen Sie einfach die
-k
Option (Index beibehalten) hinzu-u
quelle
Sie können dies einfach mit dem folgenden Befehl tun
oder
Weitere Informationen zu git stash Besuchen Sie diesen Beitrag (hier klicken)
quelle
Nehmen wir an, die neue und nicht verfolgte Datei heißt "views.json". Wenn Sie den Zweig ändern möchten, indem Sie den Status Ihrer App speichern, gebe ich im Allgemeinen Folgendes ein:
Dann:
Und es würde verstaut werden. Dann kann ich einfach den Zweig wechseln mit
quelle
Es gibt mehrere richtige Antworten hier, aber ich wollte , dass für neue ganze Verzeichnisse , darauf hinzuweisen,
'git add path'
wird nicht arbeiten. Wenn Sie also eine Reihe neuer Dateien im Pfad ohne Spur haben und dies tun:Dies wird mit der folgenden Meldung gespeichert:
und wenn der nicht verfolgte Pfad der einzige Pfad ist, den Sie verstecken, ist der "temporäre" Stash ein leerer Stash. Der richtige Weg besteht darin, den gesamten Pfad hinzuzufügen, nicht nur den Verzeichnisnamen (dh den Pfad mit einem '/' zu beenden):
quelle
Ich dachte, dies könnte gelöst werden, indem git mitgeteilt wird, dass die Datei vorhanden ist, anstatt den gesamten Inhalt in den Staging-Bereich zu übertragen und dann aufzurufen
git stash
. Araqnid beschreibt, wie man das erstere macht.oder
Letzteres funktioniert jedoch nicht:
quelle
Mein Favorit, da es auch die Dateien speichert, die Sie hinzugefügt und nicht bereitgestellt haben.
quelle
Bei der Verwendung von Sourcetree mit neu erstellten Dateien ist ein ähnliches Problem aufgetreten (diese würden auch nicht in den Vorrat aufgenommen).
Als ich zum ersten Mal "Alle inszenieren" wählte und dann die neu hinzugefügten Komponenten verwahrte, wurden sie verfolgt und daher in den Vorrat aufgenommen.
quelle
Früher habe ich über das gleiche Feature nachgedacht und es mir gewünscht. Aber im Laufe der Zeit bemerkte ich, dass es wirklich nicht benötigt wird. Wenn Sie sich verstecken, ist es in Ordnung, die neuen Dateien zu belassen. Ihnen kann nichts "Schlimmes" passieren (wenn Sie etwas anderes auschecken, wird git einen Fehler machen und die vorhandene nicht verfolgte Datei nicht überschreiben).
Und da der Zeitrahmen zwischen
git stash
und und normalerweisegit stash pop
eher klein ist, benötigen Sie die nicht verfolgte Datei schnell wieder. Ich würde also sagen, dass die Unannehmlichkeit der Datei, die angezeigt wird,git status
während Sie an etwas anderem (zwischen demgit stash
und demgit stash pop
) arbeiten, geringer ist als die Unannehmlichkeit, die durch die Arbeit verursacht wird und die Aufmerksamkeit erfordert, die es sonst kosten würde, zu versuchen, die nicht verfolgte Datei hinzuzufügen dein Vorrat.quelle