Wie bereits an anderer Stelle gesagt wurde, besteht die Antwort darin git add
die Datei. z.B.:
git add path/to/untracked-file
git stash
Die Frage wird jedoch auch in einer anderen Antwort gestellt: Was ist, wenn Sie die Datei nicht wirklich hinzufügen wollen? Nun, soweit ich das beurteilen kann, müssen Sie das tun. Und das Folgende wird PAS Arbeit:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
wird dies wie folgt fehlschlagen:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Was können Sie also tun? Nun, Sie müssen die Datei wirklich hinzufügen, jedoch können Sie sie später wieder entfernen, und zwar mit git 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, und zwar in demselben Zustand, in dem Sie sich vor der git add
(und zwar mit einer nicht verfolgten Datei namens path/to/untracked-file
(sowie alle anderen Änderungen, die Sie an verfolgten Dateien vorgenommen haben).
Eine andere Möglichkeit für einen Arbeitsablauf in diesem Bereich wäre etwa so:
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, können Sie Folgendes hinzufügen --exclude-standard
zum git ls-files
Befehl (also, git ls-files -o --exclude-standard
).]
... was auch leicht geskriptet werden könnte - sogar Aliase würden es tun (dargestellt in zsh-Syntax; passen Sie es nach Bedarf an) [außerdem habe ich den Dateinamen gekürzt, damit alles auf den Bildschirm passt, ohne in dieser Antwort zu scrollen; Sie können einen alternativen Dateinamen Ihrer Wahl verwenden]:
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 letzteres besser als Shell-Skript oder -Funktion geeignet ist, damit Parameter an git stash
für den Fall, dass Sie nicht wollen pop
sondern apply
und/oder die Möglichkeit haben möchten, einen bestimmten Vorrat anzugeben, anstatt nur den obersten zu nehmen. Vielleicht dies (anstelle des zweiten Alias, oben) [Leerzeichen entfernt, damit es ohne Scrollen passt; für bessere Lesbarkeit neu einfügen]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Hinweis : In dieser Form müssen Sie neben dem Bezeichner auch ein Aktionsargument angeben, wenn Sie einen Bezeichner für ein Versteck angeben wollen, z. B. unstashall apply stash@{1}
o unstashall pop stash@{1}
Die Sie natürlich in Ihre Tasche stecken würden. .zshrc
oder gleichwertig zu machen, langfristig bestehen.
Ich hoffe, dass diese Antwort für jemanden hilfreich ist, da sie alles in einer einzigen Antwort zusammenfasst.
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 )