2009-10-10 13 views
15

Używam wielu lokalnych gałęzi tematycznych w git, a czasem kończą się zależności między gałęziami tematów powodującymi problemy z rebase. Na przykład, o strukturze jak:Uzależnienie gałęzi zależnych od tematu

master ---> featureA ---> featureB 
        \--> featureC 

If master zmian i mogę (i rozwiązywanie) konflikty podczas przebazowania featureA, to potem przebazowania featureB na featureA wyzwala te same konflikty (a czasami ekscytujące nowe, jak również), ponieważ próbuje ponownie zastosować poprawki z gałęzi featureA. Zakładając, że rzeczywiste łatki pomiędzy featureA i będą mieć zastosowanie czysto, jeśli zostaną wybrane przez wiśnie, czy istnieje sposób na przeprowadzenie zmiany w tej sytuacji z mniej więcej takim samym skutkiem, jak wybieranie wszystkich wszystkich zatwierdzeń między featureA i?

+0

Zobacz także [jak mogę dokonać ponownej bazy całej subhistory - kilka oddziałów, z pewnymi powiązaniami między nimi wynikającymi z scalenia] (http://stackoverflow.com/a/9706495/94687). Nieprzyjemną częścią tego rozwiązania jest konieczność zresetowania gałęzi wątków do nowych potwierdzonych zatwierdzeń później. –

Odpowiedz

17

Po przebazowania featureA można zrobić

git rebase --onto featureA oldFeatureA featureB 

zakładając oldFeatureA reprezentuje popełnić na czubku featureA zanim go rebased (można je zachować inny oddział lub po prostu nie pamiętam popełnić hash).

Powinno to w zasadzie taka sama jak cherry-picking każdy popełnić między A i B na rebased wersji A.

Documentation on git-rebase (zawiera kilka pomocnych graficzne wyjaśnienia, co dzieje się podczas niektórych bardziej złożonych operacji rebase)

+0

Doskonale, dzięki. Zorientowałem się, że - wyglądało na to, że powinienem wykonać to zadanie, ale nie przyszło mi do głowy używanie starego wskazówka jako bazy. – Kai

+4

Zamiast 'oldFeatureA' powinno być możliwe użycie' featureA @ {1} ', zakładając, że baza danych była ostatnią zmianą w tej gałęzi. W przeciwnym razie użyj czegoś takiego jak '@ {2}', '@ {3}' lub '@ {godzinę temu}' – Ropez

4

W przyszłości, jeśli pracujesz z wieloma współzależnymi gałęziami tematów, być może powinieneś rozważyć użycie TopGit (README), narzędzia do zarządzania kolejką łatek za pomocą gałęzi tematycznych Git, jednej łatki na gałąź; lub alternatywnie narzędzie do zarządzania wieloma gałęziami tematycznymi.

Zobacz np. topgit Means Never Having to Wait for Reviews wpisy na blogu.

+0

Dzięki za wskazanie na TopGit! TopGit wydaje się dążyć do właściwej rzeczy: utrzymywania współzależnych oddziałów. ** Ale czy TopGit ma funkcję polegającą na ponownym umieszczeniu moich współzależnych gałęzi tematycznych na nowym stanie? ** Gdyby było to możliwe, mógłbym wykorzystać TopGit do opracowania i przygotowania moich poprawek jako oddziałów do przeglądu i ewentualnego pociągnięcia przez upstream. –

+0

Zobacz także [Dyskusja na temat "TopGit opartego na rebase"] (http://git.661346.n2.nabble.com/Branch-dependencies-td6641429.html): "Myślę, że nowy" system "musi być "bazuj na rebase", nie scalaj jak TopGit " –

Powiązane problemy