Załóżmy, że dwa zestawy zmian są wprowadzane w projekcie wersjonowanym przez git. Jeden zestaw jest wystawiony, a drugi nie.
Chciałbym ponownie sprawdzić zmiany etapowe, uruchamiając projekt w tym stanie (przed zatwierdzeniem). Jaki jest prosty sposób na odłożenie wszystkich niestopowanych zmian i pozostawienie ich tylko w fazie inscenizacji?Potrzebuję więc niestopowanych zmian, aby zniknęły z mojego projektu, ale zostały gdzieś zapisane do dalszej pracy.
To brzmi bardzo podobnie do git stash
polecenia. Ale git stash
odsunąłby od mojego projektu zarówno zmiany niestacjonarne, jak i zainscenizowane. I nie mogę znaleźć czegoś takiego git stash uncached
.
-k
opcja) lub uciążliwe w użyciu.Odpowiedzi:
Aktualizacja 2:
Nie jestem pewien, dlaczego ludzie narzekają na tę odpowiedź, wydaje się, że działa idealnie ze mną, dla plików bez zmian możesz dodać
-u
flagęPełne polecenie staje się
git stash --keep-index -u
A oto fragment
git-stash
pomocyA oto gif pokazujący, jak to wygląda:
Aktualizacja:
Mimo że jest to wybrana odpowiedź, wiele osób zwróciło uwagę, że [odpowiedź poniżej] (https://stackoverflow.com/a/34681302/292408) jest poprawna, polecam ją sprawdzić.Dzisiaj (31.01.2020) ponownie przetestowałem swoją odpowiedź z wersją git
2.24.0
i nadal uważam, że jest poprawna, dodałem powyżej małą notatkę o nieśledzonych plikach. Jeśli uważasz, że to nie działa, podaj również swoją wersję git.Stara odpowiedź :
Jeśli ta
--keep-index
opcja jest używana, wszystkie zmiany już dodane do indeksu pozostają nienaruszone:Z dokumentacji
git-stash
:Ale jeśli chcesz tylko wizualnie sprawdzić tylko zmiany etapowe, możesz spróbować
difftool
:źródło
git stash [-p|--patch]
co przypomina interaktywne przechowywanie. Zman git stash
"--patch można interaktywnie wybierać porcje z różnicy między HEAD a drzewem roboczym, które mają zostać schowane."add -p
,checkout -p
ireset -p
nigdy nie próbowałemstash -p
, dziękuję za wskazówkę: DZaakceptowana odpowiedź zawiera również zainscenizowane zmiany, jak wskazało kilku z nich. Oto sposób na zrobienie tego bez wprowadzania zmian w skrytce.
Chodzi o to, aby wykonać tymczasowe zatwierdzenie zmian etapowych, następnie ukryć zmiany niestacjonarne, a następnie cofnąć zatwierdzenie tymczasowe:
W tym momencie będziesz mieć zapas swoich niestopowanych zmian, aw kopii roboczej będą znajdować się tylko te wprowadzane.
źródło
--keep-index
Rozwiązaniem w obecnej odpowiedź akceptowanego jeszcze stashes co w indeksie, to po prostu także utrzymuje ją w indeksie. Więc to się powiela i następuje wesołość.git add .
krok może chcieć zostać ulepszony,git add --all
ponieważ powinien również pobrać pliki w katalogu powyżej bieżącego katalogu roboczego.Okazało się, że zaznaczona odpowiedź nie działa dla mnie, ponieważ potrzebowałem czegoś, co naprawdę przechowywało tylko moje niestrzelone zmiany. Zaznaczona odpowiedź,
git stash --keep-index
ukrywa zmiany zainscenizowane i niestacjonarne. Plik--keep-index
Część tylko opuści indeks nienaruszone na kopii roboczej, jak również. To działa w przypadku OP, ale tylko dlatego, że zadał nieco inne pytanie, niż w rzeczywistości oczekiwał odpowiedzi.Jedynym prawdziwym sposobem, w jaki udało mi się ukryć zmiany nieokreślone, jest w ogóle nie używać skrytki:
git checkout -- .
będzie również działać zamiastapply -R
.Praca Praca praca...
źródło
git version 2.6.1.windows.1
,git stash -k
pracował jako opisane.Git: Przechowuj niestalizowane zmiany
Spowoduje to przechowywanie wszystkich modyfikacji, których nie dodałeś:
Zauważ, że nowo utworzone (i nie dodane) pliki pozostaną w katalogu roboczym, chyba że użyjesz również
-u
przełącznika.Ponadto, twój katalog roboczy musi być czysty (tj. Wszystkie zmiany muszą zostać dodane), kiedy później git stash pop.
http://makandracards.com/makandra/853-git-stash-unstaged-changes
źródło
git stash --keep-index
. Pliki z etapami są zawarte w schowku.