2013-08-06 12 views
6

Pracuję na oddziale A, a funkcja/zadanie nie jest wykonywane. Następnie muszę przejść do innej gałęzi B dla szybkiej naprawy. Kiedy próbuję włączyć inną gałąź Git zmusza mnie do zapisania zmian lokalnych, inaczej stracę wszystkie lokalne zmiany.W lokalnym oddziale, nie chcesz zatwierdzać zmian, ale musisz przejść do innego oddziału

Muszę zatwierdzić mój niekompletny kod. Czy istnieje sposób, że mogę przełączać się między wieloma oddziałami bez popełniania i utraty kodu? A może jest lepszy sposób poradzenia sobie z sytuacją?

+0

możliwe duplikat [Oszczędzanie Git zmienia tymczasowo] (http://stackoverflow.com/questions/6800778/saving-git-changes-temporarily) –

Odpowiedz

9

Jedną opcją, jako mipadi demonstrates, jest po prostu użycie git stash.

Inną opcją jest po prostu po prostu popełnić swoje bieżące prace w toku, przełączyć oddziałów, a następnie, kiedy jesteś gotowy, aby przełączyć się z powrotem, czy mieszaną przywrócone do poprzedniego popełnić:

# While working on "feature" branch, 
# you suddenly need to go work on a hotfix: 
$ git commit --all --message "Backup my feature work" 
$ git checkout -b hotfix master 

# You did your hotfix, and are ready to go back to feature 
$ git checkout feature 
$ git reset head^ 

git reset head^ będzie wykonaj mieszane resetowanie z powrotem do zatwierdzenia przed wykonaniem zatwierdzenia kopii zapasowej, a wszystkie zmiany wprowadzone w zatwierdzeniu kopii zapasowej zostaną przywrócone do kopii roboczej. Z kopalni official Linux Kernel documentation for git reset (nacisk):

Resetuje indeksu ale nie drzewa pracy (tj zmienione pliki zostaną zachowane, ale nie zaznaczono popełnić) i informuje, co nie zostało zaktualizowane. To jest domyślna akcja.

+0

+1 Polecam też, ponieważ 'git stash' nie jest związany z żadną gałęzią. Robienie 'git commit -a -m" ukrywanie "' zachowuje kontekst twojej pracy. To powinna być zaakceptowana odpowiedź. – eckes

+0

Przechowywanie może nie być związane z odgałęzieniem, ale _jest_ oparte na bieżącym zatwierdzeniu HEAD. 'git show -s stash' pokazuje zatwierdzenie stash jako połączenie dwóch nadrzędnych commitów, z których pierwszy to HEAD, na którym bazuje skrytka.A "git schowek [zapis]" bez podanego komunikatu domyślnie zapisuje nazwę oddziału. – musiphil

+0

Wolę ukrywanie się w dowolnym miejscu, ponieważ tylko jedna komenda 'git stash' może przechowywać stan zarówno indeksu, jak i drzewa roboczego. Zatwierdzenie nie przechwytuje zmian w drzewie roboczym, które nie są wystawiane na indeks. – musiphil

8

Możesz użyć git stash, który zapisze zmiany bez tworzenia zatwierdzenia.

pierwsze, Stash zmiany:

$ git stash 

następnie przełączyć do innego oddziału:

$ git checkout branch-B 

Kiedy czytasz, wrócić do swojego pierwotnego oddziału i unstash zmiany :

$ git checkout branch-A 
$ git stash pop 

Zobacz dokumentację połączoną powyżej, aby uzyskać więcej szczegółów i szczegółów dotyczących dodatkowych przypadków użycia.


Technicznie to nie stworzyć popełnić, ale git stash używa magii, więc nie faktycznie zobaczyć commit i narzędzi git wiedzą jak prawidłowo radzić sobie z tymi pseudo-commits.

+0

dobrze, a co jeśli kiedy zrobiłem kilka zmian na oddział-B i zobowiązała się do nich, nie zobowiązują naszej branży - zmiany? – Suleman

Powiązane problemy