Z tego, co wiem, domyślnie komenda cherry-pick
przyjmuje zatwierdzenie i umieszcza je na wierzchu bieżącego odgałęzienia. Czy jest możliwe cherry-pick
zatwierdzenie w Git i umieszczenie go poniżej bieżącego zatwierdzenia?Git cherry wybierz commit i umieść go poniżej
Odpowiedz
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>
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ć C
przedHEAD
tak, że otrzymany historia staje:
A - B - C' - D' master, HEAD
\
C other
Następnie można zrobić:
git checkout HEAD^
przenieśćHEAD
, aby zatwierdzićB
git cherry-pick other master
zastosować zobowiązujeC
iD
na szczycieB
git branch -f master HEAD
abymaster
wskazują na ten sam popełnić jakHEAD
git checkout master
przenieśćHEAD
domaster
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
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ą. –
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
Podałem drugą (dłuższą) opcję w odpowiedzi. –
@ nyarlathotep108: Możesz rozważyć spróbowanie 'git rerere'. – Hasturkun