2009-11-03 18 views
15

Czasami pracuję z kilkoma oddziałami jednocześnie. Załóżmy, że mam gałęzie o nazwie master, release-1.1 i experimental. Tworzę nowy plik lub dokonuję zmiany w wersji eksperymentalnej i chcę, aby ta pojedyncza zmiana miała zastosowanie do innych oddziałów.Jak scalić pojedyncze zatwierdzenie?

Czy mogę to zrobić w git? Jeśli po prostu scalę commit do innej gałęzi, git automatycznie "fast-forward" i zawiera wszelkie commits pomiędzy. Ale musi istnieć jakiś sposób poradzenia sobie z tym przypadkiem użycia.

Odpowiedz

22

To, co chcesz zrobić, to cherry picking. Można cherry pick pojedynczy popełnić pomocą następującego polecenia:

$ git cherry-pick <commit hash or name> 

ten obejmie zmianę od tego zobowiązać tylko do bieżącego oddziału. Zauważ jednak, że tworzy to nowy commit; to nowe zatwierdzenie ma dokładnie takie same zmiany, jak wybrane przeze mnie zatwierdzenie (i nawet ta sama data zatwierdzenia i autora), ale jest to technicznie nowe zatwierdzenie, więc zobaczysz je jako nowe zatwierdzenie w, na przykład, gitk . Będziesz także musiał wykonać pick cherry dla każdej gałęzi, w której chcesz zobaczyć zmianę.

4

rozwiązanie, ale niestety jeden wolisz wiedzieć przed dokonywania zmian, jest utworzenie osobnego oddziału tylko dla tej zmiany (tzw „temat gałąź”), od najwcześniejszego oddziału lub najwcześniej popełnić to ma sens i połącz tę gałąź z gałęzią, która potrzebuje tego zatwierdzenia.

W niektórych przypadkach innym rozwiązaniem może być zmiana w branży utrzymania ruchu, połączenie działu obsługi technicznej w stabilną gałąź i połączenie stabilnej gałęzi w gałąź rozwojową.

Junio ​​C Hamano (Git opiekun) pisał o tym w swoim blogu: Resolving conflicts/dependencies between topic branches early

+0

Czy masz link do tego wpisu na blogu? Myślę, że byłoby to pomocne, pochodzące z autorytetu Git. –

+0

Może ten wpis na blogu? http://gitster.livejournal.com/27297.html – VonC

+0

Wybór wiśni wydaje się bardziej odpowiedni niż ten, przykro mi to mówić. –