W poprzednim pytaniu dotyczącym Gita Daniel Benamy mówił o przepływie pracy w Git:
Pracowałem nad mistrzem i wykonałem kilka rzeczy, a potem zdecydowałem, że chcę wstrzymać tę pracę. Zrobiłem kopię zapasową kilku zatwierdzeń, a następnie rozgałęziłem się zanim zacząłem moją bzdurną pracę.
Chciał przywrócić swój stan pracy do poprzedniego punktu w czasie bez utraty obecnych zmian. Wszystkie odpowiedzi dotyczyły na różne sposoby czegoś w rodzaju
git branch -m master crap_work
git branch -m previous_master master
Jak to się ma do tego git stash
? Jestem trochę zdezorientowany, próbując zobaczyć, jaki jest inny przypadek użycia tutaj, kiedy wydaje się, że wszystko git stash
jest już obsługiwane przez rozgałęzienie…
@ Jordi Bunster : Dzięki, to wszystko wyjaśnia . Wydaje mi się, że uważałbym „przechowywanie” za lekką, bezimienną gałąź. Więc wszystko może zrobić skrytka, gałąź też może, ale z większą ilością słów. Ładny!
git stash list
nazwy swoich skrytek.git stash show -u
aby pokazać różnicę między zasobem a kopią roboczą.Po przywróceniu skrytki zmiany zostaną ponownie zastosowane, a Ty będziesz kontynuować pracę nad kodem.
Przechowywać aktualne zmiany
Możesz też mieć więcej niż jedną skrytkę. Skrytka działa jak stos. Za każdym razem, gdy zapisujesz nową skrytkę, jest ona umieszczana na wierzchu stosu.
Zwróć uwagę na
stash@{0}
część? To twój identyfikator skrytki. Będziesz go później potrzebować, aby go przywrócić. Zróbmy to teraz. Identyfikator skrytki zmienia się z każdą utworzoną skrytką. stash @ {0} odnosi się do ostatniego utworzonego skrytki.Aby założyć skrytkę
Po zastosowaniu możesz zauważyć, że skrytka wciąż tam jest. Możesz go upuścić, jeśli już go nie potrzebujesz.
Lub, ponieważ skrytka zachowuje się jak stos, możesz wyjąć ostatnią zapisaną skrytkę:
Jeśli chcesz wyczyścić wszystkie skrytki, uruchom polecenie „wyczyść”:
Może się zdarzyć, że nie korzystasz tak często ze skrytek. Jeśli chcesz po prostu szybko ukryć swoje zmiany i przywrócić je później, możesz pominąć identyfikator skrytki.
Możesz poeksperymentować ze skrytką, zanim użyjesz jej do naprawdę ważnej pracy.
Mam też bardziej dogłębną wersję tego opublikowaną na moim blogu .
źródło
Zawsze uważam na git stash. Jeśli przechowujesz kilka razy, sprawy stają się nieuporządkowane. git stash list wyświetli numerowaną listę skrytek, które stworzyłeś, wraz z wiadomościami, jeśli je dostarczyłeś ... Ale problem polega na tym, że nie możesz wyczyścić skrytek, z wyjątkiem brutalnego wyczyszczenia skrytki git (co usuwa je wszystkie) . Więc jeśli nie zawsze jesteś analfabetą w podawaniu super-opisowych wiadomości do swoich skrytek (jest to trochę sprzeczne z filozofią skrytki), kończysz z niezrozumiałą grupą skrytek.
Jedyny znany mi sposób, aby dowiedzieć się, który z nich to użyć gitk - wszystko i znaleźć skrytki. Przynajmniej pozwala to zobaczyć, w jakim zatwierdzeniu została utworzona skrytka, a także różnicę wszystkiego, co zawiera ta skrytka.
Zauważ, że używam git 1.5.4.3 i myślę, że 1.6 dodaje git stash pop, który, jak sądzę, zastosowałby wybrany schowek i usunąłby go z listy. Co wydaje się dużo czystsze.
Na razie zawsze staram się rozgałęziać, chyba że jestem absolutnie pewien, że wrócę do tego skrytki tego samego dnia, nawet w ciągu godziny.
źródło
git stash drop [<stash>]
Jeśli szukasz przepływu pracy, który może być bardziej odpowiedni niż git stash, możesz spojrzeć na git-bottle . Jest to narzędzie służące do zapisywania i przywracania różnych stanów roboczych git jako normalnych zatwierdzeń git, efektywnie wykonując migawkę bieżącego i stosownego stanu twojego drzewa roboczego i wszystkich różnych stanów plików pokazanych w statusie git.
Kluczowe różnice w stosunku do
git stash
:git stash
zapisuje brudny stan git wąsko (zmodyfikowane pliki i dodane pliki w indeksie), podczas gdygit-bottle
jest przeznaczony do zapisywania wszystkiego , co różni sięHEAD
i rozróżnia w zachowujący sposób między zmodyfikowanymi, zmodyfikowanymi i nie dodanymi, nie dodanymi, nie scalonymi ścieżkami i pełne stany ponownego bazowania / scalania (tylko ścieżki w ramach.gitignore
nie są zapisywane).git stash
zapisuje, aby schować przedmioty, które musisz śledzić oddzielnie. Gdybym coś ukrył 2 tygodnie temu, mógłbym tego nie pamiętać, podczas gdygit-bottle
zapisuje jako wstępne zatwierdzenie aktualnej gałęzi . Odwrotna akcja jestgit-unbottle
odpowiednikiemgit stash
popu. Możliwe jest wypychanie i udostępnianie tych zatwierdzeń między repozytoriami. Może to być przydatne w przypadku zdalnych kompilacji, w których masz inne repozytorium na zdalnym serwerze tylko do budowania lub do współpracy z innymi osobami przy rozwiązywaniu konfliktów.źródło