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?
Um Ihr Arbeitsverzeichnis einschließlich der nicht getrackten Dateien (insbesondere derjenigen, die sich in der .gitignore befinden) zu verstauen, sollten Sie diesen Befehl verwenden:
git stash --include-untracked
Update 17. Mai 2018:
Neue Versionen von git haben jetzt git stash --all
, das alle Dateien speichert, einschließlich nicht verfolgter und ignorierter Dateien.
Mit git stash --include-untracked
werden ignorierte Dateien nicht mehr berührt (getestet mit Git 2.16.2).
Originalantwort unten:
*[Warnung, dies wird Ihre Dateien dauerhaft löschen, wenn Sie irgendwelche Verzeichnis/-Einträge in Ihrer gitignore-Datei haben.]1**
Ab Version 1.7.7 können Sie git stash --include-untracked
oder git stash save -u
verwenden, um nicht verfolgte Dateien zu speichern, ohne sie in den Staging-Modus zu versetzen.
Fügen Sie die Datei hinzu (git add
) und beginnen Sie, sie zu verfolgen. Dann stash. Da der gesamte Inhalt der Datei neu ist, wird er zwischengespeichert, und Sie können ihn nach Bedarf bearbeiten.
Ich dachte, man könnte das Problem lösen, indem man Git mitteilt, dass die Datei existiert, anstatt den gesamten Inhalt in den Staging-Bereich zu übertragen und dann git stash
aufzurufen. Araqnid beschreibt, wie man Ersteres macht.
git add --intent-to-add path/to/untracked-file
oder
git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file
Letzteres funktioniert jedoch nicht:
$ git stash
b.rb: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state