Jak już powiedziano w innym miejscu, odpowiedź znajduje się git add
w pliku. na przykład:
git add path/to/untracked-file
git stash
Jednak pytanie pojawia się również w innej odpowiedzi: Co, jeśli tak naprawdę nie chcesz dodać pliku? O ile mogę powiedzieć, musisz. I następujące działania NIE będą działać:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
to się nie powiedzie, jak następuje:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Więc co możesz zrobić? Cóż, musisz naprawdę dodać plik, jednak możesz później skutecznie go usunąć, używając 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
Następnie możesz kontynuować pracę, w takim samym stanie, w jakim byłeś wcześniej git add
(mianowicie z nieśledzonym plikiem o nazwie path/to/untracked-file
; oraz innymi zmianami, które mogłeś mieć do śledzenia plików).
Inną możliwością przepływu pracy w tym przypadku byłoby coś takiego:
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
[Uwaga: Jak wspomniano w komentarzu @mancocapac, możesz chcieć dodać --exclude-standard
do git ls-files
polecenia (tak, git ls-files -o --exclude-standard
).]
... które można również łatwo napisać w skrypcie - wystarczyłyby nawet aliasy (przedstawione w składni zsh; dostosuj w razie potrzeby) [skróciłem też nazwę pliku, aby pasowała do ekranu bez przewijania w tej odpowiedzi; możesz zamienić alternatywną nazwę pliku]:
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'
Zauważ, że ten drugi może być lepszy jako skrypt powłoki lub funkcja, aby umożliwić dostarczanie parametrów git stash
, na wypadek, gdybyś nie chciał, pop
ale apply
i / lub chcesz móc określić konkretną skrytkę, zamiast tylko zajmować pierwsze miejsce jeden. Być może to (zamiast drugiego aliasu powyżej) [białe spacje pasują bez przewijania; dodaj ponownie, aby zwiększyć czytelność]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Uwaga : W tym formularzu musisz podać argument akcji, a także identyfikator, jeśli chcesz podać identyfikator skrytki, np. unstashall apply stash@{1}
Lubunstashall pop stash@{1}
Które oczywiście umieścisz w swoim .zshrc
lub jego odpowiedniku, aby istniało długoterminowo.
Mam nadzieję, że ta odpowiedź jest dla kogoś pomocna, łącząc wszystko w jedną odpowiedź.
git stash show
nic nie zwraca i możesz ulec pokusie, aby go upuścić (tak jak zrobiłem, gdy zawierał przydatny skrypt, który napisałem kilka miesięcy temu → jak odzyskać upuszczoną skrytkę )