2011-07-06 15 views
11
G---H    // Release Branch 
/
/
A---B---E---F--- // master 
    \ 
    \ 
     C---D---  // bug fix branch 

W oparciu o nasze szczególne potrzeby związane z naszym projektem, dość często zdarza się, że powyższy scenariusz się pojawia. Mamy naszą gałąź master/dev z pewnymi zatwierdzeniami. Następnie dostajemy raport o błędzie i zaczynamy go poprawiać w gałęzi błędu (zatwierdza C i D powyżej). W międzyczasie więcej zdarzy się w branży dev. Następnie powiedziano nam, że musimy utworzyć wydanie dla klienta, które nie może zawierać zmian wprowadzonych przez zatwierdzenia B, E i F powyżej, ale powinno zawierać poprawkę.Git: scalanie tylko zmian dokonanych w oddziale

Odsunęliśmy program od dev, zanim zmienna B została kiedykolwiek zastosowana, ale jaki jest najlepszy sposób, aby naprawić błąd również w tej gałęzi wydania? Jeśli wykonam scalenie gałęzi, uwzględnię zmianę, która została wprowadzona w B, której nie chcę. Mogę wykonać cherry-pick zatwierdzanych C i D, ale czytałem, że zbieranie wiśni nie zawsze jest dobrym pomysłem based on this answer zasadzie ponieważ moje repo będzie wtedy wyglądać tak:

G---H---C'---D'--- // Release Branch 
/
/
A---B---E---F---  // master 
    \ 
    \ 
     C---D---  // bug fix branch 

Tak C „i D” pojawiają się jako całkowicie nowe zatwierdzenia z różnymi identyfikatorami sha-1 jako C i D. Czy to naprawdę jest coś złego? Do jakich problemów to może prowadzić? Czy istnieje lepszy sposób na przeniesienie zmian z gałęzi napraw błędów do gałęzi wydania?

Odpowiedz

0

Nie ma prawdziwego niebezpieczeństwa, jeśli chodzi o wybór wiśniowy, zwłaszcza jeśli nie planuje się scalania oddziału release w master.

Zasadniczo można zapobiec takim problemom, opierając poprawki błędów na zatwierdzeniach uwzględnionych we wszystkich gałęziach, w których ma zostać scalona poprawka. W rozwoju samego gita osiąga się to przez łączenie wszystkich poprawek do gałęzi maint (to jest bieżącej stabilnej serii, która otrzymuje tylko poprawki), a następnie okresowe łączenie tego w master. W ten sposób poprawka jest wszędzie, a połączenia są zdrowe.

+0

A jakie jest niebezpieczeństwo, jeśli scalę gałąź zwalniającą z powrotem do mistrza? Na diagramie, który stworzyłem, zmiana H powinna w końcu zostać zastosowana z powrotem do głównej gałęzi. – DaveJohnston

+0

Cóż, nie ma problemu, jeśli nie połączysz gałęzi z poprawkami błędów w master. Jeśli to zrobisz, możliwe, że pojawi się więcej konfliktów niż w innym przypadku (jeśli obie gałęzie modyfikują te części kodu w ten sam sposób, a także dodają do niego różne zmiany). "Dangerous" jest przesadą, naprawdę ... wszystko to oznacza, że ​​musisz ręcznie naprawić kilka konfliktów i że te dwa potwierdzenia pojawią się dwa razy w historii (z różnymi identyfikatorami commitów). –

9

This zaleca się, aby zamiast scalać dwa odgałęzienia, dokonać ponownego ich umieszczenia, gdy git będzie tylko odnawiać niepotrzebne zatwierdzenia.

Ale zamiast cherry-picking, można rozważyć tylko przebazowania oddziału:

rebase --onto release B bug 

gdzie release jest oddział uwolnienie i bug jest oddział bug.

wtedy coś podobnego

  C'---D' //Bug branch  
     /
    /
    G---H // Release Branch 
/ 
/
A---B---E---F---  // master 

Ale to oznaczałoby, że kiedy chcesz, poprawki błędów, które należy stosować do opanowania, że ​​trzeba by połączyć błąd z panem, który powoduje, że wszystkie zmiany w wydaniu także do dodania do mistrza.

To od Ciebie zależy, które rozwiązanie najlepiej Ci odpowiada.

Należy pamiętać, że nie należy odnawiać rozgałęzień, które były pushed, na inne, ponieważ spowoduje to bałagan dla nich.

+0

Wygląda na to, że wszystkie te zatwierdzenia są przekazywane do zdalnego repo. W takim przypadku nie zaleca się dokonywania ponownej oceny. – Sailesh

+0

Dodałem tę część, zanim zobaczyłem ten komentarz. – Ikke

1

Uwaga: jak wyjaśniono powyżej, wybór wiśni jest tutaj akceptowalny.
Jego główne wady to:

W twoim przypadku:

  • ma potrzeby, aby scalić z powrotem.
  • jeśli jesteś pewien, że C i D nie są oparte na kodzie wprowadzonym w B, ... cherry-wybierz je, gdziekolwiek ich potrzebujesz.
Powiązane problemy