Frage

Ich habe Änderungen an einer Datei, sowie eine neue Datei, und möchte git stash verwenden, um sie weg zu setzen, während ich zu einer anderen Aufgabe wechseln. Aber git stash selbst stashes nur die Änderungen an der vorhandenen Datei; die neue Datei bleibt in meinem Arbeits Baum, meine zukünftige Arbeit unübersichtlich. Wie kann ich diese Datei untracked bunkern?

War es hilfreich?

Lösung

Aktualisieren 17. Mai 2018:

Neue Versionen von Git haben jetzt git stash --all, die alle Dateien stashes, einschließlich untracked und ignoriert Dateien.
git stash --include-untracked nicht mehr berühren Dateien ignoriert (getestet auf git 2.16.2).

Original Antwort unter:

Warnung, dies dauerhaft tun wird Ihre Dateien löscht, wenn Sie Verzeichnis / * Einträge in Ihrer gitignore Datei.

Ab Version 1.7.7 können Sie sie git stash --include-untracked oder git stash save -u bunkern untracked Dateien ohne Staging verwenden können.

In (git add) die Datei und starten Sie es zu verfolgen. Dann verstauen. Da der gesamte Inhalt der Datei neu sind, werden sie untergebracht werden, und man kann es als notwendig manipulieren.

Andere Tipps

Wie von git 1.7.7, git stash nimmt die --include-untracked Option (oder Kurz Hand -u). So schließen untracked Dateien in Ihrem Versteck, verwenden Sie eine der folgenden Befehle ein:

git stash --include-untracked
git stash -u

Warning, Dadurch wird permanent Ihre Dateien löschen, wenn Sie irgendwelche Verzeichnis / * Einträge in Ihrer gitignore Datei.

Fügen Sie die Datei in den Index:

git add path/to/untracked-file
git stash

Der gesamte Inhalt des Index, zuzüglich unstaged Änderungen an vorhandenen Dateien, werden alle machen es in das Versteck.

In git bash, stashing von untracked Dateien mit dem Befehl erreicht wird,

git stash --include-untracked

oder

git stash -u

http://git-scm.com/docs/git-stash

git stash entfernt alle untracked oder Uncommited Dateien aus Ihrem Arbeitsbereich. Und Sie können mit folgenden Befehlen git stash zurückkehren

git stash pop

Das wird die Datei wieder in Ihrem lokalen Arbeitsbereich platzieren.

Meine Erfahrung

Ich hatte eine Änderung meiner gitignore Datei auszuführen Bewegung .classpath und .project Dateien in Remote-Repo zu vermeiden. Ich bin nicht wie jetzt erlaubt diese modifizierte .gitignore in Remote-Repo zu bewegen.

.classpath und .project Dateien wichtig sind für Eclipse -., Die mein Java-Editor

ich zunächst selektiv hinzugefügt meine Rest der Dateien und engagierte für die Inszenierung. Allerdings kann Endspurt nicht, es sei denn die modifizierten .gitignore fiels und die untracked Dateien nämlich durchgeführt werden. .project und .classpath nicht beiseite geschaffen werden.

I verwendet

 git stash 

für die modifizierte Datei .gitignore stashing.

Für .classpath und .project Datei stashing, habe ich

git stash --include-untracked

und es entfernt, um die Dateien von meinem Arbeitsplatz. Das Fehlen dieser Dateien nimmt meine Fähigkeit der Arbeit an meiner Arbeitsstelle in Eclipse entfernt. Ich ging auf mit dem Verfahren für den Abschluss der engagierten Dateien auf Remote drücken. Sobald dies erfolgreich getan wurde, habe ich

git stash pop

Dies klebte die gleichen Dateien wieder in meinem Arbeitsbereich. Dies gab mir wieder meine Fähigkeit, am selben Projekt in Eclipse zu arbeiten. Hoffen, dass diese Bürsten Missverständnisse beiseite.

Wie an anderer Stelle gesagt worden ist, ist die Antwort, die Datei git add. z.

git add path/to/untracked-file
git stash

Allerdings ist die Frage auch in einer anderen Antwort aufgeworfen: Was ist, wenn Sie nicht wollen, die Datei wirklich hinzufügen? Nun, soweit ich das beurteilen kann, Sie zu haben. Und Folgendes wird nicht Arbeit:

git add -N path/to/untracked/file     # note: -N is short for --intent-to-add
git stash

Dies wird fehlschlagen, wie folgt:

path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state

Also, was können Sie tun? Nun, Sie müssen wirklich die Datei hinzufügen, aber können Sie effektiv un-fügen Sie es später 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 auch weiterhin in den gleichen Zustand arbeiten, wie Sie in waren vor dem git add (nämlich mit einer untracked Datei path/to/untracked-file genannt, sowie alle weiteren Änderungen, die Sie verfolgt Dateien gehabt haben könnte)

.

Eine weitere Möglichkeit für einen Workflow auf diese wäre so etwas wie:

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

[Anmerkung: Wie in einem Kommentar von @mancocapac erwähnt, können Sie mögen --exclude-standard zum git ls-files Befehl (so, git ls-files -o --exclude-standard) hinzuzufügen.]

... was auch leicht scripted werden könnte - auch Aliase tun würde (in zsh Syntax dargestellt, nach Bedarf anpassen) [auch, verkürzte ich die Dateinamen, damit es alle auf dem Bildschirm paßt in dieser Antwort ohne Scrollen; fühlen 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 als ein Shell-Skript oder Funktion besser sein könnte, Parameter zu ermöglichen, geliefert werden, falls git stash, Sie wollen nicht pop aber apply und / oder möchten einen bestimmten Vorrat angeben zu können, und nicht nur die obersten nehmen. Vielleicht ist dies (an Stelle des zweiten alias, oben) [Leerzeichen ohne Scrollen passen gestrippt; erneut hinzufügen für erhöhte Lesbarkeit]:

function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}

Hinweis : In dieser Form müssen Sie sowie die Kennung eine Aktion Argument liefern, wenn Sie einen Vorrat Kennung liefern gehen, z.B. unstashall apply stash@{1} oder unstashall pop stash@{1}

Was natürlich in Ihrem .zshrc oder gleichwertig setzen würde, um langfristige zu machen existiert.

Hoffentlich ist diese Antwort auf jemanden hilfreich, alles setzen alle zusammen in einer Antwort.

Auf git Version 2.8.1. Folgende Arbeiten für mich

Um die geänderten und untracked Dateien in Stash zu speichern, ohne einen Namen

git stash save -u

Um die geänderten und untracked Dateien in Stash mit einem Namen speichern

git stash save -u <name_of_stash>

Sie können entweder Pop verwenden und später wie folgt anwenden.

git stash pop

git stash apply stash@{0}

Ich war in der Lage zu verstauen nur die untracked Dateien, indem Sie:

git stash save "tracked files I'm working on"
git stash save -u "untracked files I'm trying to stash"
git stash pop stash@{1}

Die letzte erscheint das Versteck der verfolgten Dateien, so dass nur die untracked Dateien gebunkert zu verlassen.

Wenn Sie untracked Dateien beiseite zu schaffen wollen, aber halten Sie indizierte Dateien (die, die Sie im Begriff sind zum Beispiel zu begehen), nur -k hinzufügen (halten Index) Option zum -u

git stash -u -k

Sie können einfach tun es mit folgendem Befehl

git stash save --include-untracked

oder

git stash save -u

Für mehr über git stash Besuchen Sie diesen Beitrag (hier klicken)

lassen annehmen, die die neue und untracked Datei aufgerufen wird: „views.json“. wenn verzweigen Sie ändern möchten, indem Sie den Zustand Ihrer App stashing, ich tippe allgemein:

git add views.json

Dann:

git stash

Und es wäre gebunkert werden. Dann kann ich nur Zweig ändern mit

git checkout other-nice-branch

Es gibt mehrere richtige Antworten hier, aber ich wollte, dass für neue ganze Verzeichnisse, darauf hinzuweisen, 'git add path' wird nicht Arbeit. Also, wenn Sie eine Reihe von neuen Dateien in untracked-Pfad und dies tun:

git add untracked-path
git stash "temp stash"

diese mit der folgenden Meldung bunkern werden:

Saved working directory and index state On master: temp stash
warning: unable to rmdir untracked-path: Directory not empty

und wenn untracked-Pfad ist der einzige Weg Sie versteckend, die Stash "temp Stash" wird ein leeres Versteck sein. Richtiger Weg ist, den gesamten Pfad hinzufügen, nicht nur die Verzeichnisnamen (das heißt am Ende den Pfades mit einem ‚/‘):

git add untracked-path/
git stash "temp stash"

Ich dachte, dies zu sagen git gelöst werden könnte, dass die Datei vorhanden ist, und nicht der gesamte Inhalt davon in den Staging-Bereich zu begehen, und dann git stash nennen. Araqnid beschreibt wie die ersteren zu tun.

git add --intent-to-add path/to/untracked-file

oder

git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file

Allerdings ist die letztere nicht:

$ git stash
b.rb: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state

ich verwenden, um darüber nachzudenken und die gleiche Funktion wünscht. Aber im Laufe der Zeit bemerkte ich, es ist wirklich nicht nötig ist. Wenn Sie bunkern, dann ist es OK, um die neuen Dateien zu verlassen. Nothing „schlecht“ kann ihnen passieren (wenn Sie etwas anderes überprüfen, git werden Fehler und nicht überschreiben die vorhandene untracked Datei)

Und da in der Regel der Zeitrahmen zwischen den git stash und den git stash pop eher klein ist, werden Sie die untracked Datei schnell wieder benötigen. Also ich würde sagen, dass die Unannehmlichkeiten der Datei in git status oben zeigt, während Sie sich auf etwas anderes arbeiten (zwischen dem git stash und dem git stash pop) ist kleiner als die Unannehmlichkeiten, die durch die Arbeit verursacht und benötigte Aufmerksamkeit, es würde sonst versuchen kosten die hinzufügen untracked Datei zu Ihrem Versteck.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top