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?
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
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). –