zmiany w git stash dotyczą nowej gałęzi?


349

Pracowałem nad gałęzią master, wprowadziłem pewne zmiany, a potem je ukryłem. Teraz mój mistrz jest w HEAD.

Ale teraz chcę pobrać te zmiany, ale do nowej gałęzi, która rozgałęzia się z wersji HEAD gałęzi master.

Jak mam to zrobic ?


3
Myślę, że tego szukasz? stackoverflow.com/questions/556923/…
zx1986,

Odpowiedzi:


506

Czy standardowa procedura nie działa?

  • wprowadzać zmiany
  • git stash save
  • git branch xxx HEAD
  • git checkout xxx
  • git stash pop

Krótszy:

  • wprowadzać zmiany
  • git stash
  • git checkout -b xxx
  • git stash pop

8
@sfletche, jeśli chcesz nazwać swoją skrytkę, musisz zrobić git stash save <nazwa>, w przeciwnym razie, jak mówisz, jest to to samo, co git stash.
SgtPooki

5
Po zastosowaniu tego podejścia wydaje się, że po powrocie do poprzedniej gałęzi przywrócone zostały ukryte zmiany. Czy możliwe jest wprowadzenie ukrytych zmian w nowym oddziale?
Thomas Higginbotham,

Po prostu wprowadź zmiany do nowego oddziału.
ChrisR

2
@ThomasHigginbotham nie Katalog roboczy jest wspólny dla gałęzi i jest kopiowany z jednej do drugiej, gdy przechodzisz z jednej gałęzi do drugiej. Aby „osiągnąć” to, co chcesz, zwykle robię różne skrytki, dodając użyteczny opis przy pomocy git stash save "description"wspomnianego wcześniej polecenia; a następnie I git cleargałąź (do kosza rzeczywistego katalogu roboczego), a następnie git stash apply stash@{my_desired_stash}w pożądanej gałęzi (po przełączeniu do tego git checkout <branch>oczywiście). Wiem, że to nie jest prawdziwe rozwiązanie, ale najlepsze, co możesz zrobić z git .
Kamafeather

Sfinalizowałem to również git stash dropraz, gdy popełniłem
licznik

221

Ponieważ już ukryłeś swoje zmiany, wszystko czego potrzebujesz to ten linijka:

  • git stash branch <branchname> [<stash>]

Z dokumentacji ( https://www.kernel.org/pub/software/scm/git/docs/git-stash.html ):

Tworzy i sprawdza nowy oddział o nazwie < BRANCHNAME > począwszy od popełnienia przy której < zapas > został pierwotnie stworzony, zastosuje zmiany zapisane w < zapas > do nowego katalogu roboczego i indeksu. Jeśli to się powiedzie, a < skrytka > jest odniesieniem do formy skrytka @ {< wersja >}, wówczas upuszcza < skrytkę >. Gdy nie podano < skrytki >, stosuje najnowszą.

Jest to przydatne, jeśli gałąź, na której uruchomiono polecenie git stash save, zmieniła się na tyle, że zastosowanie git stash nie powiedzie się z powodu konfliktów. Ponieważ skrytka jest nakładana na zatwierdzenie, które było HEAD w czasie uruchamiania skrytki git, przywraca pierwotnie ukryty stan bez żadnych konfliktów.


3
W przypadku pojedynczych skrytek jest to właściwa droga. Odwołanie do nazwy skrytki nie jest wymagane, ponieważ Git zastosuje najnowszą skrytkę, przejdzie do nowej gałęzi i zastosuje skrytkę w jednym poleceniu.
sinisterOrange

@RodneyGolpe Wydaje się, że dotyczy to również skrytki do „master”? Co chcę zrobić, to z „master”, git stash, to spodziewałbym się, że „git stash branch [nazwa gałęzi] zastosuje skrytkę do nowej gałęzi, pozostawiając master bez zmian?
David Doria

2
@DavidDoria Musisz zatwierdzić zmiany w nowym oddziale, zanim wrócisz do Master.
Rodney Golpe

Teraz również zatwierdził zmiany do opanowania ... Naprawdę jestem zagubiony ... oczywiście nadal nie rozumiem gita. Po miękkim resecie mistrza, a następnie wyciągnięciu ze zdalnego repo, teraz jestem tam, gdzie chciałem być. Mistrz jest w stanie przed zmianami. Nowy oddział przechowuje zmiany.
Ekkstein

1

Jeśli masz jakieś zmiany w swoim obszarze roboczym i chcesz je ukryć w nowej gałęzi, użyj tego polecenia:

git stash branch branchName

Uczyni to:

  1. nowy oddział
  2. przenieś zmiany do tej gałęzi
  3. i usuń najnowszą skrytkę (jak: git stash pop)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.