2012-06-29 25 views
10

Po przeczytaniu tego artykułu, ma sens rebase zebrać zmian z głównej gałęzi na mojej funkcji oddziału: Git workflow and rebase vs merge questionsGIT Rebase Oddział, z którym współpracuje się?

clone the remote repo 
git checkout -b my_new_feature 
..work and commit some stuff 
git rebase master 
..work and commit some stuff 
git rebase master 
..finish the feature 
git checkout master 
git merge my_new_feature 

Działa to doskonale, jeśli oddział cechą jest lokalny moim komputerze i mogę przepisać historię, jak mi się podoba.

Ale co, jeśli będę współpracować z kimś innym w branży elementów. W jaki sposób otrzymujemy najnowsze zmiany z głównej gałęzi do naszej gałęzi funkcjonalnej teraz, gdy nasz oddział funkcji jest przechowywany w odległym repozytorium?

Więc łączymy się? Czy jest jeszcze inna zręczna metoda GIT, aby to zrobić?

Z góry dziękuję!

Odpowiedz

1

Jeśli pracujesz samodzielnie, rebazy nic nie robią. Nie powierzyłeś niczego nowego do opanowania.

Twój seryjnej będzie przodu łączyć i można to zrobić za nie sprawdzenie go w ogóle z

git push . HEAD:master 

czy pracujesz z kimś, czy nie, łącząc pracę, która jest w pana do swojej funkcji gałąź to zła praktyka. Nazywa się to back-merge. Powodem, dla którego jest źle, jest to, że nie masz atomowej pracy. historia mistrza jest teraz zaplątana w twoją funkcję, dzięki czemu praca z tą funkcją, na przykład przekręcanie, jest niemożliwa w wielu sytuacjach.

Musisz myśleć o swojej strategii rozgałęziania i o tym, co chcesz osiągnąć. Oto moje:

http://dymitruk.com/blog/2012/02/05/branch-per-feature/

Widać, że każdy oddział zaczyna się od tego samego miejsca. Masz oddzielną gałąź integracji i gałąź kandydatów do wydania, aby połączyć i dopasować wybrane funkcje, nie zanieczyszczając ich.

Jeśli chodzi o współpracę nad jedną funkcją z kolegą, zależy to od tego, jak duża jest funkcja (szczegółowość pracy). Jeśli jest duży, możesz zastosować powyższy proces do samej funkcji i oddziału na zadanie.

Jeśli jest to niewielka funkcja, którą można scalić lub zmienić na bazie tej gałęzi - nie ma to większego znaczenia. W tym momencie sprowadza się do tego, z czym czuje się zespół.

+0

Dynmitruk: Dzięki za wpis i link. Z linku brzmi to, jak wybieranie wiśni jest bliskie rozwiązaniu, jakie jest dostępne. Dziękuję za Twój czas! –

2

Istnieje rozwiązanie dla twojego przypadku bez przełączania się na zupełnie inny proces roboczy.

Jeśli chodzi o uzyskiwanie poprawek z głównej gałęzi do oddziałów funkcjonalnych, jak już się dowiedzieliście, najlepiej jest wybrać te konkretne zatwierdzenia. Ale wolę mieć od wątki tematów, nawet dla poprawek zamiast ustalać w głównej linii, w ten sposób mogę odpowiednio scalić te poprawki z każdą zablokowaną przez nich funkcją.

Aby historia rozwoju obiektów była możliwie jak najczystsza i liniowa, wszyscy współpracownicy muszą używać git pull --rebase, aby otrzymywać aktualizacje, aby nie przeszkadzały w tym żadne bezsensowne zatwierdzenia.

Jeśli nadal chcesz dokonać reorganizacji gałęzi współpracy nad bieżącą główną gałęzią programistyczną (do ciągłego testowania integracji lub w innych celach) lub przepisać jej historię w jakikolwiek inny sposób, możesz to zrobić po ukończeniu/zakończeniu tej funkcji, po prostu przed scaleniem do głównej gałęzi, ale powinieneś to zrobić w nowym oddzielnym lokalnym/prywatnym oddziale.

Oto jak odtworzyć wyświetlanymi na temat zmian (skip wiśnia kostki) w nowej gałęzi z Master:

$ git checkout -b feature_final feature # jump to a new branch for grooming 
$ git rebase [-i] master    # rebase topic changes onto master 

Stamtąd jest do was, co zrobić z rebased oddziału -push upstream dla QA lub bezpośrednio do master (z --no-ff, jeśli chcesz, aby było to jawne w historii).