2013-06-24 8 views
5

Pytanie jest o jakiś przypadek krawędź git-flow metodologiigit-flow: Jak uniknąć pewnych zmian dokonanych w oddziale uwolnienia od połączenia z powrotem do rozwoju

mam jakiś typowy historii git-flow tak:

 o---o---o---o [release-3.5.0] 
    /
----o---o---o---o---o [development] 

Git-flow powiedział nam scalić uwalnianiu 3.5.0 oddział w rozwój następnie zwolnij jest gotowy. Tak więc, ostatecznie dostaniemy zmiany wprowadzone w gałęzi wydania do gałęzi rozwojowej.

 o---o---o---o 
    /   \ 
----o---o---o---o---o [development] 

Teraz wyobraź sobie, mamy popełnić „X” na oddział uwalniania co my NIE chcą w gałęzi rozwojowej, na przykład, że jest jakiś hack/poprawki lub inny, który jest już ustalona w rozwoju bardziej rozsądny sposób (tj. przez zatwierdzenie Y)

 o---X---o---o [release-3.5.0] 
    /
----o---o---o---Y---o [development] 

Głównym pytaniem jest więc, jak poradzić sobie z takimi sytuacjami? Jak zapobiec ponownemu zgłoszeniu (lub zobowiązaniom) do rozwoju?

+0

Możliwy duplikat [git - określonych zatwierdzeń omijając gdy łączących] (http ://przepełnienie stosu.com/questions/727994/git-skipping-specific-commits-when-merging) – Lu55

Odpowiedz

7

Podczas odpowiedzi polecając rebase i/lub połączenia/przywrócenie/squash będzie działać, ja osobiście uważam, tym lepiej będzie odpowiedź to:

git checkout development 
git merge --no-commit release-3.5.0 
# make whatever changes you need to fixup the "hack" and/or clean up any conflicts 
git commit 
+0

'--no-commit' nie generuje 'informacji o scaleniu'. Gałąź wydania nie zostanie pokazana w historii jako scalona, ​​nie będzie traktowana jako scalona przez komendę jak 'git branch --merged'. Tak więc przez przypadek można przypadkowo połączyć go ponownie. – Olegas

+2

@Olegas Chociaż twój komentarz jest poprawny technicznie, postępując zgodnie z powyższym kompletnym przepływem pracy * utworzy * informację o scaleniu (zakładając, że masz na myśli jakąś kombinację komunikatu zatwierdzenia w formacie scalania i/lub wskaźników rodzica, które tworzą scalenie w historia DAG), ale jest to ostatnie 'zatwierdzenie git ', które je tworzy. 'Git merge --no-commit' po prostu ustawia rzeczy tak, że zostaną utworzone odpowiednie meta dane. Jeśli spróbujesz 'git branch --merged' przed ostatecznym' git commit', to poprawnie pokazuje, że gałąź nie została jeszcze scalona, ​​ponieważ scalenie nie zostało zatwierdzone ... – twalberg

+1

tak, masz rację. Po zatwierdzeniu wszystko jest w porządku, w tym informacje o scaleniu, myliłem się. – Olegas

1

Masz kilka opcji:

1) stosowanie git rebase -i

W tym trybie można zmieniają bazę swój oddział zwalniający na gałęzi rozwojowej i wyklucza X-tym popełnić.

Ostrzeżenie W tym przypadku zepsujesz istniejące sklonowane repozytoria.

2) używać git cherry-pick

W tym trybie będziesz miał możliwość wsiadania popełnia jeden po drugim.

3) korzystać git rebase -i na oddzielnej gałęzi i połączyć je potem, jak określono w tej odpowiedzi: Is it possible to exclude specific commits when doing a git merge?

+0

'rebase' nie jest odpowiednie, ponieważ 'ostrzeżenie, które zauważyłeś,' cherry-pick' jest dopuszczalne, ale zbyt skomplikowana przyczyna' gałąź wydania, którą mam też ma wiele commitów (ale może to być jakoś zautomatyzowane). – Olegas

+1

cherry-pick faktycznie pozwala na wybór zakresu commitów (http://stackoverflow.com/a/1994491/696792), ale obejmuje to również pewne problemy (określone w połączonej odpowiedzi) – StKiller

+0

Zaktualizował odpowiedź trzecim sposobem. – StKiller

2

W takich sytuacjach zawsze ty chcą w pełni połączyć wyzwalacz (-Jak) gałęzie. Upewnij się więc, że niczego nie brakuje.

Jednak podczas scalania można dowolnie modyfikować zawartość - w tym w celu upuszczenia lub ponowienia niektórych zmian. Dla przykładu, scal gałąź, cofnij zatwierdzenie, którego nie lubisz i zgniataj, które powróci do zatwierdzenia scalenia. Oczywiście zanotuj w wiadomości o zatwierdzeniu scalenia tej akcji.

Jeśli poprawka jest już w wersji devel, scalenie zostanie po prostu pominięte lub rozwiązany zostanie konflikt, wybierając wersję devel.

Chodzi o to, że chcesz, aby historia była twoją drugą figurą, a stan - jak najlepiej.

Powiązane problemy