Jak mogę ukryć określony plik, pozostawiając inne aktualnie zmodyfikowane poza schowkiem, który zamierzam zapisać?
Na przykład, jeśli status git daje mi to:
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")
i chcę przechowywać tylko app / views / cart / welcome.thtml, jak mam to zrobić? Coś takiego (ale oczywiście to nie działa):
git stash save welcome_cart app/views/cart/welcome.thtml
git checkout -- filename
i przywrócić go do pierwotnego stanu.Odpowiedzi:
EDIT: Ponieważ git 2.13, jest polecenie, aby zapisać ścieżkę specyficzne dla skrytki:
git stash push <path>
. Na przykład:STARA ODPOWIEDŹ:
Możesz to zrobić za pomocą
git stash --patch
(lubgit stash -p
) - przejdziesz do trybu interaktywnego, w którym zobaczysz każdy zmieniony fragment. Użyj,n
aby pominąć pliki, których nie chcesz ukryć,y
gdy napotkasz ten, który chcesz schować, orazq
wyjść i zostawić pozostałe porcje bez skrytki.a
ukryje pokazaną porcję i resztę porcji w tym pliku.Nie jest to najbardziej przyjazne dla użytkownika podejście, ale działa, jeśli naprawdę tego potrzebujesz.
źródło
git stash --keep-index
pozwoli ci na przechowywanie wszystkich niestopionych zmian (przeciwieństwo tego, czego szukasz). stackoverflow.com/a/8333163/378253a
zamiast tego powieszy
, ukryje ten fragment + pozostałą część pliku, co jest znacznie szybsze.d
zrobi odwrotnie, tj. nie będzie przechowywać żadnych kolejnych porcji w bieżącym pliku. i rzeczywiście?
pokaże wszystkie możliwe opcje.-m welcome_cart
część.Zwykle dodaję do indeksu zmiany, których nie chcę przechowywać, a następnie przechowuję z
--keep-index
opcją.Ostatni krok jest opcjonalny, ale zwykle tego chcesz. Usuwa zmiany z index.
Ostrzeżenie Jak zauważono w komentarzach, wszystko trafia do schowka, zarówno w inscenizacji, jak i poza sceną. Po
--keep-index
prostu zostawia indeks w spokoju po zakończeniu skrytki. Może to powodować konflikty scalania, gdy później otworzysz schowek.źródło
--keep-index
prostu zostawia indeks w spokoju po zakończeniu skrytki. Więc to nie jest poprawna odpowiedź na pytanie, AFAICT.git stash; git stash pop stash@{1}
.Aby dodać do odpowiedzi Svicka,
-m
opcja po prostu dodaje wiadomość do twojego skrytki i jest całkowicie opcjonalna. Tak więc poleceniejest całkowicie poprawne. Na przykład, jeśli chcę tylko przechowywać zmiany w
src/
katalogu, mogę po prostu uruchomićźródło