2016-03-15 12 views

Odpowiedz

8

Zawsze możesz wykonać rebase po wybraniu cherry. Wyglądałoby to tak:

git cherry-pick <hash> 
git rebase HEAD~2 -i 

Zamień zlecenia commit w oknie rebase.

Druga opcja

W przypadku, gdy chcesz rozwiązać konflikty tylko raz, jak to zaznaczono. Możesz wziąć długą drogę. Usuń bieżące zatwierdzenie, wybierz inny, a następnie wybierz najnowsze zatwierdzenie.

git log --oneline -1 
    <write_down_this_hash> description 
git reset --hard HEAD~1 
git cherry-pick <hash to cherry pick> 
git cherry-pick <write_down_this_hash> 
+0

problemem jest to, że po wiśni wybierz, wchodzę w fazę "rozwiązywania konfliktu". Chciałbym rozwiązać konflikty tylko jeden raz, gdy wybrane przeze mnie zatwierdzenie nie jest na szczycie (ale we właściwym miejscu, tuż poniżej szczytu). – nyarlathotep108

+0

Podałem drugą (dłuższą) opcję w odpowiedzi. –

+0

@ nyarlathotep108: Możesz rozważyć spróbowanie 'git rerere'. – Hasturkun

2

Oto inne podejście. Załóżmy, że Twoja historia wygląda następująco:

A - B - D master, HEAD 
    \ 
    C other 

i chcesz cherry pick popełnić CprzedHEAD tak, że otrzymany historia staje:

A - B - C' - D' master, HEAD 
    \ 
    C other 

Następnie można zrobić:

  1. git checkout HEAD^ przenieść HEAD, aby zatwierdzić B
  2. git cherry-pick other master zastosować zobowiązuje C i D na szczycie B
  3. git branch -f master HEAD aby master wskazują na ten sam popełnić jak HEAD
  4. git checkout master przenieść HEAD do master
+0

W ten sposób sam bym to zrobił. (Chociaż nazwałbym końcowe zatwierdzenie 'D'', ponieważ będzie to kopia 'D' zamiast oryginalnego' D'.) – torek

+0

Prawda, wynikowe 'D' będzie miało inny SHA-1 niż oryginał, ale ponieważ na drugim wykresie jest tylko jedno "D", nie jest konieczne dodawanie adnotacji do liczby pierwszej. Jednak widzę twój punkt, jeśli porównać oba wykresy ze sobą. –