2013-05-02 22 views
12

Spojrzałem na When do you use git rebase instead of git merge? Ale chciałbym mieć pewność, które rozwiązanie wybrać w tym przypadku: Chcę zaimplementować nową funkcję na Master, więc rozgałęzienie go do nowego Oddział funkcji. Wykonuję 10 zatwierdzeń w funkcji, podczas gdy inna osoba wykonuje inne zatwierdzenia w programie Master.Git - Merge vs rebase

Moje pytanie brzmi, jeśli chcę zachować moją gałąź z dala od Mistrza do celów testowych, ale muszę przetestować go z nowym zintegrowanym zatwierdzeniem Master. Więc, czy powinienem połączyć Master w Feature (a nie Feature w Master, który zastosowałby moje modyfikacje na master przed testowaniem) lub zrobić rebase?

+0

To na debatę. Zrobiłbym rebase. – 1615903

+0

Najlepsza odpowiedź w łączu, który przeglądasz, zawiera wyraźne zalecenie, aby dokonać ponownej oceny w przypadku użycia. – mah

+0

W przyszłości należy używać bardziej opisowych tytułów, które lepiej wyjaśniają problem, który próbujesz rozwiązać. –

Odpowiedz

5

Dlaczego nie utworzyć nowego oddziału, aby przetestować scaloną wersję? Na przykład:

git checkout -b test-merged-feature master 
git merge my-feature 
[... do your testing ..] 

Nie ma szczególnie powód zrobić rebase tutaj, ale jeśli nie masz już pchnął swój fabularny gałąź, że byłoby dobrze, jak dobrze. Te pytania są częściowo związane z tym, jak chcesz wyglądać w twojej historii - niektórzy ludzie nie lubią widzieć wielu połączeń; niektórzy wolą go jako sposób na śledzenie, które zatwierdzenia przyczyniły się do określonej cechy.

+0

Przypuszczam, że posiadanie oddziału "dev" do testowania elementów razem, a następnie umieszczenia go na master do produkcji byłoby dobrą praktyką w tym przypadku? Pytanie o scalanie a rebase jest po prostu o tym, jak chcesz, aby historia popełnienia była? – user2316341

+0

Zgadzam się na tę opcję (połączenie w nowym oddziale), więc +1. Wciąż jednak opowiadam się za ponownym założeniem w mojej odpowiedzi poniżej. – VonC

+0

@ user2316341 gałąź "dev" ma sens, jeśli musisz zintegrować (połączyć) kilka gałęzi Feature, aby sprawdzić, czy wszystkie one działają razem. Ale jeśli masz tylko jedną gałąź Feature naraz ...to dodaje złożoności, dla małego zysku. – VonC

5

O ile nie pchnąłeś już swojego oddziału (i wiesz, że inni sklonowali twoje repozytorium), nadal robiłbym rebase, o czym wspomniałem w mojej własnej odpowiedzi "git rebase vs git merge".

Testuj lub nie, zwykle wykonuję rebase za każdym razem, gdy aktualizuję lokalne repozytorium (pobieranie git), aby zapewnić ostateczne scalenie (Feature do master) będzie szybkie do przodu.

Nie chodzi tylko o to, jak wygląda twoja historia, ale przede wszystkim o upewnienie się, że to, co tworzysz, nie jest oparte na starej wersji master i wciąż działaj wbrew najnowszym ewolucjom z dnia master .

+0

Więc mówisz, że zawsze powinienem robić rebase przez większość czasu, ale nie, jeśli już wypchnąłem moją gałąź. Dlaczego ? Na czym polega problem zepchnięcia oddziału? – user2316341

+0

@ user2316341 a rebase przepisuje historię SHA1. W takim przypadku trzeba by "git push --force" zastąpić historię, która została już pchnięta przez nową generowaną przez bazę rebase. Jeśli nikt nie korzysta z twojej branży, nie jest to wielka sprawa, a podstawą do reszty jest zdecydowanie najprostsze i najbezpieczniejsze rozwiązanie, które polega na sztucznym scalaniu do pośredniej gałęzi. – VonC

+0

@ user2316341 patrz http://stackoverflow.com/a/8940299/6309 jako przykład problemu. – VonC

5

W workflow Znam znajduje się bagażnik, a oddział integracji (s) i wyposażone oddziały

I zostały rebaseing wobec oddziałów „pochodnych”. (przez gałęzie pochodne, mam na myśli kierunek Z DALA od pnia) i łączę się w kierunku oddziałów integracyjnych.

Podoba mi się, że zawsze pracuję w branży, która ma taką samą historię jak filia, z którą będę się integrować. Podoba mi się, że scalanie staje się szybkim krokiem naprzód, więc wiem, że to, co właśnie scaliłem, jest dokładnie takie samo jak to, co właśnie przetestowałem w mojej branży.

0

Kiedy 2 programistów zaangażuje się w to samo repozytorium (spowoduje to konflikt), możesz scalić 2 zatwierdzenia, tworząc zatwierdzenie scalania lub możesz ponownie umieścić 1 zatwierdzenie (twoje) na drugim zatwierdzeniu. zawsze lepiej jest dokonać ponownego wyboru, zamiast generować zatwierdzenie scalenia.