Wie kann ich eine bestimmte Datei speichern, wobei die anderen aktuell geänderten Dateien aus dem zu speichernden Speicher entfernt bleiben?
Zum Beispiel, wenn mir der Git-Status Folgendes gibt:
younker % gst
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: app/controllers/cart_controller.php
# modified: app/views/cart/welcome.thtml
#
no changes added to commit (use "git add" and/or "git commit -a")
und ich möchte nur app / views / cart / welcome.thtml verstauen, wie würde ich das machen? So etwas wie (aber das funktioniert natürlich nicht):
git stash save welcome_cart app/views/cart/welcome.thtml
git checkout -- filename
und auf den ursprünglichen Zustand zurücksetzen.Antworten:
BEARBEITEN: Seit Git 2.13 gibt es einen Befehl zum Speichern eines bestimmten Pfads zum Stash :
git stash push <path>
. Zum Beispiel:ALTE ANTWORT:
Sie können dies mit
git stash --patch
(odergit stash -p
) tun - Sie gelangen in den interaktiven Modus, in dem Ihnen jedes geänderte Stück angezeigt wird. Verwendenn
Sie diese Option, um die Dateien zu überspringen, die Sie nicht speichern möchten,y
wenn Sie auf die Dateien stoßen, die Sieq
speichern möchten, und um die verbleibenden Hunks zu beenden und nicht zu speichern.a
wird das angezeigte Stück und den Rest der Stücke in dieser Datei verstecken.Nicht der benutzerfreundlichste Ansatz, aber er erledigt die Arbeit, wenn Sie sie wirklich brauchen.
quelle
git stash --keep-index
können Sie alle nicht bereitgestellten Änderungen speichern (das Gegenteil von dem, wonach Sie suchen). stackoverflow.com/a/8333163/378253a
stattdessen sageny
, wird dieses Stück + der Rest der Datei verstaut, was viel schneller ist.d
das Gegenteil tun, dh keine weiteren großen Stücke in der aktuellen Datei bunkern. und in der Tat?
wird alle möglichen Optionen zeigen.-m welcome_cart
Teil weglassen.Normalerweise füge ich Indexänderungen hinzu, die ich nicht speichern möchte, und dann mit
--keep-index
Option.Der letzte Schritt ist optional, aber normalerweise möchten Sie es. Änderungen werden aus dem Index entfernt.
Warnung Wie in den Kommentaren erwähnt, wird alles inszeniert, sowohl inszeniert als auch nicht inszeniert. Das
--keep-index
lässt den Index einfach in Ruhe, nachdem der Stash abgeschlossen ist. Dies kann zu Zusammenführungskonflikten führen, wenn Sie den Stash später öffnen.quelle
--keep-index
lässt den Index einfach in Ruhe, nachdem der Stash abgeschlossen ist. Dies ist also keine gültige Antwort auf die Frage AFAICT.git stash; git stash pop stash@{1}
.Um die Antwort von svick zu ergänzen, fügt die
-m
Option einfach eine Nachricht zu Ihrem Vorrat hinzu und ist völlig optional. Also der Befehlist vollkommen gültig. Wenn ich zum Beispiel nur Änderungen im
src/
Verzeichnis speichern möchte , kann ich sie einfach ausführenquelle