Wiodące odpowiedzi opisują, jak zastosować zmiany z konkretnego zatwierdzenia do bieżącej gałęzi. Jeśli to rozumiesz przez „jak połączyć”, po prostu użyj cherry-pick, jak sugerują.
Ale jeśli naprawdę chcesz scalenia , tj. Chcesz nowego zatwierdzenia z dwoma rodzicami - istniejącego zatwierdzenia w bieżącej gałęzi i zatwierdzenia, od którego chciałeś zastosować zmiany - wtedy nie da się tego osiągnąć.
Posiadanie prawdziwej historii scalania może być pożądane, na przykład, jeśli proces kompilacji korzysta z przodków git do automatycznego ustawiania ciągów wersji na podstawie najnowszego znacznika (za pomocą git describe).
Zamiast wybierania „wiśniowego” możesz wykonać rzeczywistą git merge --no-commit, a następnie ręcznie dostosować indeks, aby usunąć wszelkie niepożądane zmiany.
Załóżmy, że jesteś na gałęzi Ai chcesz scalić zatwierdzenie na końcu gałęzi B:
git checkout A
git merge --no-commit B
Teraz masz skonfigurowane zatwierdzenie z dwojgiem rodziców, aktualny typ zatwierdzeń Ai B. Możesz jednak zastosować więcej zmian, niż chcesz, w tym zmiany wcześniejszych zatwierdzeń w gałęzi B. Musisz cofnąć te niechciane zmiany, a następnie zatwierdzić.
(Może istnieć prosty sposób na ustawienie stanu katalogu roboczego i indeksu z powrotem do stanu sprzed scalenia, dzięki czemu masz czyste konto, na którym możesz wybrać zatwierdzenie, które chciałeś.) Nie wiem, jak osiągnąć ten czysty plan. git checkout HEADI git reset HEADoba usunę stan scalenia, pokonując cel tej metody).
Więc ręcznie cofnij niechciane zmiany. Na przykład możesz
git revert --no-commit 012ea56
dla każdego niechcianego zatwierdzenia 012ea56.
Kiedy skończysz dostosowywać, utwórz zatwierdzenie:
git commit -m "Merge in commit 823749a from B which tweaked the timeout code"
Teraz masz tylko pożądaną zmianę, a drzewo przodków pokazuje, że technicznie połączyłeś się z B.