Będę tu używał dość niebezpiecznych operacji, więc po prostu zapamiętaj.
Ta odpowiedź sprawia, że kilka założeń:
Twój ostateczny master
gałąź powinna wyglądać następująco: A - B - D - E
Twój ostateczny new-feature
gałąź powinna wyglądać następująco: A - B - C
Nieobecność zatwierdzenia C
nie wpłynie na stosowanie zatwierdzeń D
i E
na górze zobowiązania B
.
Jeśli tak nie jest, należy zaktualizować tutaj.
Najpierw, w gałęzi master, tworzymy nową gałąź jako kopię zapasową. Nazwijmy to po prostu "kopią zapasową".
git branch backup
Ma to na celu umożliwienie nam łatwego przywrócenia głównej gałęzi, na wypadek gdyby coś poszło nie tak później. Oczywiście możemy użyć git reflog
, ale jest to o wiele wygodniejsze.
Następnie na gałęzi master zrobić:
git rebase -i HEAD~3
ten powinien odpalić edytor tekstu dla git rebase
(tryb interaktywny). Znajdź linię zatwierdzenia C
i usuń ją.
Teraz twój mistrz gałąź powinna wyglądać następująco:
A - B - D' - E'
nie martw się o mnie pisanie A - B - D' - E'
zamiast A - B - D - E
. D
i D'
są zasadniczo równoważne pod względem zestawów zmian.To samo dotyczy E
i E'
.
Docieramy tam. Zakładam, że commit C
na gałęzi new-feature
ma być rozgałęziony od zatwierdzenia B
. Znajdź popełnienia SHA1 do popełnienia B
, następnie (pominąć kątowniki poniżej):
git checkout -b new-feature <SHA1 of commit B>
To utworzy oddział zwany new-feature
że rozpoczyna się popełnić B
i sprawdza go dla Ciebie. Teraz jesteśmy na new-feature
gałęzi i wygląda to tak:
A - B
Ostatnim krokiem jest, aby dowiedzieć się SHA1 commit popełnić C
. Mamy go w gałęzi backup
. Przy użyciu metody git log backup
(lub innej metody) znajdź zatwierdzenie SHA1 zatwierdzenia C
w gałęzi kopii zapasowej. Po tym, na new-feature
gałęzi, zrobić:
git cherry-pick <SHA1 of commit C>
Oczywiście, proszę pominąć kątowników.
Teraz new-feature
gałąź powinna wyglądać następująco:
A - B - C'
Dziękuję bardzo! Szukałem takiego wyjaśnienia. – bbill
Po przebiciu, 'git push' odmówi przekazania masterów z powodu konfliktów z pilotem. Użyłem 'git push origin + master', aby to uzyskać, ale nie jestem pewien, czy jest to właściwy wybór. – Guss