Czy istnieje sposób na przeniesienie pojedynczego zatwierdzenia z gałęzi na inną gałąź?
Mam taką strukturę gałęzi:
-- -- -- -- -- (Master)
\
-- -- -- -- -- XX (Feature-branch)
Wszystko, co chcę zrobić, to zmienić bazę ostatniego zatwierdzenia Feature-branch
na główny i cofnąć Feature-branch
jeden zatwierdzenie.
-- -- -- -- -- XX (Master)
\
-- -- -- -- -- (Feature-branch)
W jaki sposób mogę to zrobić?
Odpowiedzi:
Możesz wybrać wiśniowy XX do opanowania.
I usuń ostatnie zatwierdzenie z gałęzi funkcji za pomocą git reset.
źródło
cherry-pick
sprawiło, że wyglądały tak, jakby zostały usunięte ze starej lokalizacji i utworzone w nowej lokalizacji. Przypuszczam, że rebase by się tym zajął, ale do tej pory przeszedłem na wyższy poziom, więc nie mogę tego przetestować. W każdym razie uważaj, jeśli masz podobną sytuację.Feature-branch
źródle, musisz to zrobić,git push -f origin Feature-branch
ponieważFeature-branch
jest teraz uważany za 1 zatwierdzenie zaorigin/Feature-branch
.To mówi: „Zmień bazę zatwierdzeń między ostatnią przed gałęzią a rozgałęzieniem (czyli XX zatwierdzeniem) na końcu gałęzi głównej”
Po tej operacji
branch
wskazówka jest przenoszona na zatwierdzenieXX
, więc chcesz ją ustawić z powrotem za pomocąKtóry mówi „zresetuj końcówkę gałęzi do zatwierdzenia przed jej poprzednim stanem”
Więc wiśnia jest prostszym rozwiązaniem ...
źródło
--onto
wcześniej nie używałem, więc może robię coś źle. BTW, OP powiedział rebase, ale wygląda na to, że chce zrobić najlepszy wybór.Właściwie jest to całkiem proste. Rozwiązaniem jest wykonanie interaktywnej rebase i „porzucenie” wszystkich zatwierdzeń, których nie chcesz umieszczać w rebase.
git rebase -i <target_branch>
gdzietarget_branch
jest gałąź, na której chcesz się oprzećNastępnie edytujesz plik, który jest otwierany i
pick
wybrane zatwierdzenia idrop
(lubd
w skrócie) wszystkie zatwierdzenia, których nie chcesz przynosić.źródło
Odpowiedź @Charles jest poprawna. W każdym razie skończyło się na tym, że korzystałem z tego wiele razy, przede wszystkim do zmiany bazy konfiguracji w projekcie
że tworzę dla niego nowe polecenie:
normalnie chcesz automatycznie uzupełniać nazwy gałęzi dla tego polecenia, więc dodaj to źródło tej funkcji (dodając do .bashrc lub .profile):
autouzupełnianie git wyszuka go
możesz użyć tego polecenia w następujący sposób:
Kiedy poprawnie podzielisz cechy, możliwości są nieograniczone.
Myślę, że to jest to, co kołdra ludzie lubią robić.
to polecenie i tak będzie działać z dowolnym sha / ref, który podasz:
źródło
Oto inna opcja:
Polecenia wyglądają następująco:
To nie jest polecenie rebase, nie, ale jest to rebase w duchu.
źródło