Deweloperzy często muszą wielozadaniowości. Możesz pracować nad nową funkcją i może być prośba o naprawę błędu. Lub możesz być głównym programistą wielu projektów.
Kiedy przełączasz się między zadaniami, czasami nie chcesz popełnić niedokończonej pracy. W takich przypadkach polecenie Git Stash może być wielką pomocą. Pozwala na układanie zmian, a później wrócić do niedokończonej pracy bez dodawania niepotrzebnych zatwierdzeń do repozytoriów GIT.
Przepływ pracy dla Git Stash
Zainicjujmy oddział GIT Master i popełnij readme pliku.tekst.
$ mkdir my_project
$ cd my_project/
$ git init
$ Touch Readme.tekst
$ git add -a
$ git commit -m „inicjalizuj”
Teraz dodajmy kolejny plik o nazwie A.TXT do gałęzi głównej.
$ dotyk a.tekstJeśli sprawdzisz historię, zobaczysz:
$ git log -liniaTeraz utwórzmy gałąź funkcji 1 i dodajmy B.plik txt:
Funkcja oddziału $ git1Otwórz swój b.plik txt w edytorze i umieść w wierszu:
Mam zamiar to zmienić na…I zapisz plik. Jeśli sprawdzisz swój status GIT, zobaczysz następujące:
Status $ git
Na funkcji oddziału 1
Zmiany nie zostały zainscenizowane w celu zatwierdzenia:
(Użyj „Git dodaj…”, aby zaktualizować to, co zostanie popełnione)
(Użyj „Git Checkout -…”, aby odrzucić zmiany w katalogu roboczym)
Zmodyfikowany: b.tekst
Nie dodano żadnych zmian w celu zatwierdzenia (użyj „git add” i/lub „git commit -a”)
Załóżmy, że na tym etapie otrzymasz prośbę o aktualizację.plik txt w gałęzi głównej. Ale nie skończyłeś z B.plik txt. Jeśli spróbujesz sprawdzić gałąź główną, otrzymasz następujący błąd:
$ git kectout Master
Błąd: Twoje lokalne zmiany w następujących plikach zostaną zastąpione przez kasę:
B.tekst
Proszę, popełnij swoje zmiany lub zatrzymaj je przed zmianą gałęzi.
Przerwanie
Ale nie chcesz popełniać niedokończonej pracy w B.tekst. W tej sytuacji możesz użyć Git Stash:
$ git StashJeśli sprawdzisz B.txt, powinien być pusty:
$ cat b.tekstJeśli sprawdzisz skrytkę, zobaczysz:
$ git Stash List
stash@0: WIP na funkcji 1: 2CFE39B Dodano B.tekst
Jeśli spróbujesz sprawdzić gałąź główną, powinieneś być w stanie to zrobić teraz:
$ git kectout Master
Przełączony na „mistrz” oddziału
Załóżmy, że wprowadzasz zmiany niezbędne na mistrzu, a następnie wrócisz do gałęzi funkcji 1:
Funkcja $ git kector1
Twoja b.TXT jest nadal pusty:
$ cat b.tekstAle jeśli otrzymasz zmiany ze skrytki za pomocą następującego polecenia:
$ git Stash Zastosuj
Na funkcji oddziału 1
Zmiany nie zostały zainscenizowane w celu zatwierdzenia:
(Użyj „Git dodaj…”, aby zaktualizować to, co zostanie popełnione)
(Użyj „Git Checkout -…”, aby odrzucić zmiany w katalogu roboczym)
Zmodyfikowany: b.tekst
Nie dodano żadnych zmian w celu zatwierdzenia (użyj „git add” i/lub „git commit -a”)
Komenda stosowania zapasu wzięła schowane zmiany i zastosowało je do B.plik txt
Możesz ukończyć swoją pracę w B.txt, modyfikując linię
Do
Teraz śmiało i popełnij swoje zmiany:
$ git add -aZastosowanie skrytki nie czyści go automatycznie ze skrytki. Musisz go wyczyścić ręcznie:
$ Git Stash Drop
Upuszczony refs/stash@0 (0a66a16b32633e8d564d08e38254c491c1b1d3be)
Dlaczego git zapasu z imieniem?
Git Stash to stos. Dzięki czemu możesz ciągle tworzyć zmiany.
Załóżmy, że dodajesz „x” do b.txt, schuj, dodaj „y” do b.txt, schuj i dodaj „Z” do B.txt i schowaj. Jeśli sprawdzisz historię Stash, zobaczysz coś takiego:
$ git Stash ListNie masz możliwości wiedzy, która stash ma, która zmiana. Kiedy się schowujesz, możesz użyć opcji zapisu, aby umieścić w komentarzach. Możesz użyć komentarzy, aby załączyć nazwę do swojego skrytki i uczynić je rozpoznawalnymi:
$ git stash zapisz „x”
Zapisany katalog roboczy i stan indeksu na funkcji 1: x
Głowa jest teraz zmodyfikowana 2d6f515.tekst
Aby dodać modyfikację „X”, „Y” i „Z”, możesz uzyskać następujące w skrytce za pomocą opcji zapisu dla każdej skrytki:
$ git Stash List
stash@0: na funkcji 1: z
stash@1: na funkcji 1: y
stash@2: na funkcji 1: x
Teraz masz nazwę każdej zmiany, którą schowałeś. Niestety nie możesz użyć nazwy do odzyskania skrytki. Będziesz musiał użyć numeru Stash. Załóżmy, że chcesz uzyskać zmianę „y”. Widzisz, że stash@1 jest y. Możesz więc zastosować tę zmianę w bieżącej gałęzi:
$ git stash zastosuj stash@1
I twój b.txt powinien mieć zmiany ze stash@1.
Możesz użyć tej samej metody, aby upuścić skrytkę. Załóżmy, że zdajesz sobie sprawę, że nie potrzebujesz już x stash. Możesz po prostu użyć następującego polecenia, aby usunąć ten schowek:
$ git stash drop stash@2
I skrytka powinna zniknąć:
$ git Stash List
stash@0: na funkcji 1: z
stash@1: na funkcji 1: y
Pamiętaj, że jeśli użyjesz opcji Zastosuj i upuszczasz bez żadnych parametrów, użyje górnej części stosu (stash@0).
Komenda Git Stash to potężny sposób zarządzania swoim obszarem roboczym. Opanowanie tego polecenia pomoże Ci pracować wydajniej.
STACK Orblow: Porak-to-Name-and-Retrieve-a-Stash-by-Bet-in-w-git