2016-06-21 13 views
7

Ich bin kein großer Experte für Git, aber ich benutze es seit ein paar Jahren. In letzter Zeit habe ich merkwürdiges Verhalten im Zusammenhang mit dem Verstecken bemerkt. Es scheint nur teilweise für mich zu arbeiten.Wie kann ich git stash neue Dateien hinzufügen, die noch nicht bereitgestellt wurden?

Zum Beispiel habe ich heute versucht, 4 nicht festgeschriebene Änderungen zu speichern. 1 Datei wurde dem Stash hinzugefügt, die restlichen 3 blieben unverändert. Ich habe es einige Male versucht und nach dem ersten Versuch bekam ich nur "Keine lokalen Änderungen zum Speichern", aber der Status zeigte immer noch die 3 nicht festgelegten Änderungen.

Jedoch fand ich zufällig, dass wenn ich zuerst die vorher nicht stable Änderungen einstelle, sie normalerweise verstaut werden. Ich habe herumgespielt und das ist wiederholbar: Wenn alle Änderungen nicht festgeschrieben sind, wird nur die eine Änderung gespeichert. Wenn die "Problem" -Änderungen inszeniert werden, werden alle Änderungen gespeichert (egal, ob die "gute" Änderung inszeniert wird oder nicht, sie wird immer gespeichert).

Ist das ein Fehler oder mache ich etwas falsch?

Ich benutze Git für Windows 2.8.2 und Git Extensions 2.48.05.

Es spielt keine Rolle, ob ich versuche, die Änderungen über die Git Extensions GUI oder über die Konsole zu speichern.

EDIT: Wenn ich alle 4 Änderungen vor dem Stashing stage, wenn ich einen Stash Pop mache, werden die 3 Problemänderungen inszeniert, wie zuvor, aber die gute Änderung, die immer bleibt, ist nicht committed. Der Stash-Pop rollt also den Status nicht so um, wie er vor dem Stash war. Dies ist auch wiederholbar.

+4

Vielleicht werden die Dateien, die nicht bereitgestellt werden, nicht von Git überwacht? Versuchen Sie 'Git stash -u' –

+2

@ Jonathan.Brink: Das ist die Antwort. Die Änderungen, die nicht gespeichert wurden, waren neue Dateien, die noch nicht verfolgt wurden. Ich habe die -u-Flagge gesetzt und sie haben sich ohne Probleme versteckt. Wenn Sie das beantworten möchten, akzeptiere ich es. –

Antwort

13

Das Problem scheint zu sein, dass der Befehl standardmäßig keine nicht aufgezeichneten Dateien enthält.

Um untracked Dateien enthalten, verwenden Sie die -u (--include-untracked) Flagge:

git stash -u 

Wenn die --include-untracked Option verwendet wird, werden alle untracked Dateien auch verstaute und dann gereinigt mit git clean, das funktionierende Verzeichnis in einem sehr sauberen Zustand belassen.

+5

wie in Antworten auf [diese frühere Frage] erwähnt (http://stackoverflow.com/questions/835501/how-do-you-stash-an-untracked-file), mit 'git stash -u' ** wird [ gelöschte Ordner endgültig löschen] (https://gitlab.com/tortoisegit/tortoisegit/issues/1200) ** – phillchill