Jag har ändringar i en fil, plus en ny fil, och vill använda git stash för att lägga undan dem medan jag byter till en annan uppgift. Men git stash i sig självt gömmer bara ändringarna i den befintliga filen; den nya filen finns kvar i mitt arbetsträd och rör till mitt framtida arbete. Hur kan jag gömma denna ospårade fil?
Om du vill gömma din arbetskatalog inklusive ospårade filer (särskilt de som finns i .gitignore) vill du förmodligen använda den här cmd:n:
git stash --include-untracked`.
Uppdatering 17 maj 2018:
Nya versioner av git har nu git stash --all
som stashar alla filer, inklusive ospårade och ignorerade filer.
git stash --include-untracked
berör inte längre ignorerade filer (testat på git 2.16.2).
Originalsvar nedan:
*[Varning, om du gör detta kommer dina filer att permanent raderas om du har några katalog/ poster i din gitignore fil.]1**
Från och med version 1.7.7 kan du använda git stash --include-untracked
eller git stash save -u
för att gömma ospårade filer utan att lägga upp dem.
Lägg till (git add
) filen och börja spåra den. Stash sedan. Eftersom hela innehållet i filen är nytt kommer det att stashed, och du kan manipulera det vid behov.
Jag trodde att detta kunde lösas genom att tala om för git att filen finns, istället för att överföra allt innehåll i den till staging-området och sedan kalla git stash
. Araqnid beskriver hur man gör det förstnämnda.
git add --intent-to-add path/to/untracked-file
eller
git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file
Det senare fungerar dock inte:
$ git stash
b.rb: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state