2011-08-03 15 views
201

Pracowałem na gałęzi głównej, wprowadziłem pewne zmiany, a następnie je ukryłem. Teraz mój mistrz jest na HEAD.Zmiany w zasobie git dotyczą nowego oddziału?

Ale teraz chcę odzyskać te zmiany, ale do nowego oddziału, który rozgałęzia się z wersji HEAD oddziału głównego.

Jak to zrobić?

+1

Myślę, że tego szukasz? http://stackoverflow.com/questions/556923/how-to-merge-my-local-uncommitted-changes-int-another-git-branch – zx1986

Odpowiedz

274

Czy standardowa procedura nie działa?

  • dokonać zmian
  • git stash save
  • git branch xxx HEAD
  • git checkout xxx
  • git stash pop

Shorter:

  • dokonać zmian
  • git stash
  • git checkout -b xxx
  • git stash pop
+39

krótszy: 'git checkout -b xxx' – eckes

+25

Tylko dla wyjaśnienia @eckes 'git checkout -b xxx' jest alternatywą dla' git branch xxx HEAD', a następnie 'git checkout xxx'. Aby osiągnąć to, co chce OP, nadal musisz wykonać komendy 'git stash'. – Simon

+9

Kolejny skrót: 'git stash' jest równoważny' git stash save' – sfletche

190

Skoro już ukryty zmiany, wszystko czego potrzebujesz to ten jeden-liner:

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

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

Tworzy i sprawdza się nowy oddział o nazwie < BRANCHNAME> począwszy od popełnienia przy której < zapas> został pierwotnie stworzony, zastosuje zmiany zapisane w < przechowaj> do nowego drzewa roboczego i indeksu. Jeśli to uda, a < zapas> to odniesienie postać stash @ {< zmiany>}, jest następnie spada do < zapas>. Gdy podany jest nr, nie można zastosować najnowszego.

Jest to przydatne, jeśli gałąź, w której uruchomiłeś zapisywanie git stash, zmieniła się na tyle, że git skasował się z powodu konfliktu. Ponieważ skrytka jest stosowana na górze zatwierdzenia, które było HEAD w czasie, gdy uruchamiano git, to przywraca pierwotnie ukryty stan bez konfliktów.

+3

W przypadku pojedynczych skrytek jest to droga do zrobienia. Oznaczenie nazwy zasobnika nie jest wymagane, ponieważ Git zastosuje najnowszą skrytkę, przełączy się do nowej gałęzi i zastosuje skrytkę w 1 komendzie. – sinisterOrange

+0

@RodneyGolpe Wydaje się, że stosuje się również skrytkę do "master"? Co chcę zrobić z "master", git stash, to bym się spodziewał, że "git stash branch [nazwa_grupy] zastosuje skrytkę do nowego oddziału, zostawiając mistrza bez zmian? –

+2

@DavidDoria Musisz wprowadzić zmiany w nowym oddziale przed powrotem do wzorca. –

Powiązane problemy