Istnieje wiele różnych sposobów, w zależności od tego, jak daleko jesteś i w której gałęzi (ach) chcesz je mieć.
Zróbmy klasyczny błąd:
$ git checkout master
... pause for coffee, etc ...
... return, edit a bunch of stuff, then: oops, wanted to be on develop
Więc teraz chcesz, aby te zmiany, do których jeszcze się nie zobowiązałeś master
, były obecne develop
.
Jeśli nie maszdevelop
jeszcze metoda jest trywialne:
$ git checkout -b develop
Tworzy to nową develop
gałąź, zaczynając od tego, gdzie teraz jesteś. Teraz możesz zatwierdzić i wszystko jest gotowe develop
.
Ci majądevelop
. Sprawdź, czy Git pozwoli ci się przełączyć bez robienia czegokolwiek:
$ git checkout develop
To się powiedzie lub będzie narzekać. Jeśli to się uda, świetnie! Po prostu się zaangażuj. Jeśli nie ( error: Your local changes to the following files would be overwritten ...
), nadal masz wiele opcji.
Prawdopodobnie najłatwiej jest git stash
(jak powiedzieli wszyscy inni respondenci, którzy pokonali mnie w kliknięciu post). Run git stash save
lub git stash push
, 1 lub po prostu git stash
co jest skrótem save
/ push
:
$ git stash
To zatwierdza twój kod (tak, naprawdę robi pewne zatwierdzenia) przy użyciu dziwnej metody nie-rozgałęzienia-y. Wprowadzane przez niego zatwierdzenia nie znajdują się „w” żadnej gałęzi, ale są teraz bezpiecznie przechowywane w repozytorium, więc możesz teraz przełączać gałęzie, a następnie „stosować” skrytkę:
$ git checkout develop
Switched to branch 'develop'
$ git stash apply
Jeśli wszystko pójdzie dobrze i podoba ci się wyniki, powinieneś to zrobić git stash drop
. To usuwa odniesienie do dziwnych zatwierdzeń typu non-branch-y. (Nadal znajdują się w repozytorium i czasami można je odzyskać w nagłych wypadkach, ale w większości celów należy uznać, że w tym momencie zniknęły).
Ten apply
krok łączy ukryte zmiany, korzystając z potężnego mechanizmu scalającego Git, tego samego rodzaju, którego używa podczas scalania gałęzi. Oznacza to, że możesz uzyskać „konflikty podczas łączenia”, jeśli gałąź, nad którą pracowałeś przez pomyłkę, wystarczająco różni się od gałęzi, nad którą zamierzałeś pracować. Dlatego dobrym pomysłem jest dokładne sprawdzenie wyników, zanim założysz, że skrytka została zastosowana prawidłowo, nawet jeśli sam Git nie wykrył żadnych konfliktów scalania.
Wiele osób używa git stash pop
, co jest krótką ręką dla git stash apply && git stash drop
. O ile to możliwe, to w porządku, ale oznacza to, że jeśli aplikacja spowoduje bałagan i zdecydujesz, że nie chcesz iść tą ścieżką, nie możesz łatwo odzyskać skrytki. Dlatego polecam oddzielić apply
, sprawdzić wyniki, drop
tylko wtedy, gdy są satysfakcjonujące. (To oczywiście wprowadza kolejny punkt, w którym możesz zrobić kolejną przerwę na kawę i zapomnieć o tym, co robiłeś, wrócić i zrobić coś złego , więc nie jest to doskonałe lekarstwo).
1save
w git stash save
to stary czasownik tworzenia nowego zapas. Git w wersji 2.13 wprowadził nowy czasownik, aby uczynić rzeczy bardziej spójnymi pop
i dodać więcej opcji do polecenia tworzenia. Git w wersji 2.16 formalnie zdezaktualizował stary czasownik (chociaż nadal działa w Git 2.23, który jest najnowszą wersją w czasie, gdy go edytuję).
git stash
git-scm.com/book/en/Git-Tools-Stashing