2013-05-31 11 views
17

Zastanawiam się, czy możliwe jest wyrywanie wiórów ze schowka.Jak wybrać cherry ze skrytki w git?

git stash save "test cherry-pick from stash" 

*git cherry-pick [email protected]{0}* --> Is this possible? 

otrzymuję następujący exception gdy próbowałem powyżej command:

Error:

~/Documents$ git cherry-pick [email protected]{0} 
error: Commit 4590085c1a0d90de897633990f00a14b04405350 is a merge but no -m option was given. 
fatal: cherry-pick failed 

Odpowiedz

23

Problem polega na tym, że skrytka składa się z dwóch lub trzech zatwierdzeń. Podczas przechowywania zmodyfikowane drzewo robocze jest przechowywane w jednym zatwierdzeniu, indeks w jednym zatwierdzeniu oraz (jeśli jest używana flaga --include-untracked) wszelkie niepotwierdzone pliki w trzecim zatwierdzeniu.

Możesz to zobaczyć, jeśli używasz gitk --all i robisz skrytkę.

enter image description here

[email protected]{0} punkty do popełnienia który zawiera drzewo roboczą.

Można jednak cherry-pick niż popełnić jeśli nie

git cherry-pick "[email protected]{0}" -m 1 

Powodem że cherry-pick uważa, że ​​ukryta jest scalanie, a zatem potrzebuje parametr -m 1 jest to, że zapas popełnić ma multpile rodzice, jak widać na wykresie.

Nie jestem do końca pewien, co chcesz osiągnąć, wybierając cherry-picking. Ewentualną alternatywą jest utworzenie oddziału ze skrytki. Zatwierdź zmiany i połącz je z bieżącym oddziałem.

git stash branch stashchanges 
git commit -a -m "changes that were stashed" 
git checkout master 
git merge stashchanges 
+1

>> Nie jestem pewien, co dokładnie chcesz osiągnąć, wybierając cherry-picking? - W moim przypadku proste scalenie byłoby w porządku, wykonując polecenie stos/pop. Ale zastanawiałem się, czy mogę wybrać kilka zmian z ukrytych zmian. Dzięki za odpowiedź. –

-2

nie zrobiłem tego wcześniej. Ale strona man na cherry-pick mówi, że działa tylko na commits.

Given one or more existing commits, apply the change each one introduces, 
    recording a new commit for each. This requires your working tree to be 
    clean (no modifications from the HEAD commit). 

Stashing nie jest zatwierdzeniem i nie przesuwa HEAD. Tak więc, nie można tego zrobić [jest to tylko domysły]

+1

W rzeczywistości nie tylko jest to ukryte zobowiązanie, ale także kilka. Ale często nie są pokazywane przez narzędzia do logowania. Zobacz moją odpowiedź. –

Powiązane problemy