Wie bereits an anderer Stelle erwähnt, lautet die Antwort auf git add
die Datei. z.B:
git add path/to/untracked-file
git stash
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:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
Dies wird wie folgt fehlschlagen:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Also was kannst du tun? Nun, Sie müssen die Datei wirklich hinzufügen, aber Sie können sie später effektiv mit hinzufügengit rm --cached
:
git add path/to/untracked-file
git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder
# do some other work
git stash list
# shows:
# stash@{0}: On master: don't forget to un-add path/to/untracked-file
git stash pop # or apply instead of pop, to keep the stash available
git rm --cached path/to/untracked-file
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:
git ls-files -o > files-to-untrack
git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself!
git stash
# do some work
git stash pop
git rm --cached `cat files-to-untrack`
rm files-to-untrack
[Hinweis: Wie in einem Kommentar von @mancocapac erwähnt, möchten Sie möglicherweise hinzufügen --exclude-standard
den git 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]:
alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash'
alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'
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
aber apply
, 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]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
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.
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 )