2011-09-01 6 views
20

Pracuję nad projektem (sam) i dla każdej rozwijanej przeze mnie funkcji tworzę nowy oddział, pracuję nad tą funkcją, a następnie scalam ją do opanowania. Więc normalnie nigdy nie pracuję na dwóch różnych gałęziach jednocześnie i nigdy nie dotykam mistrza podczas pracy w oddziale.Git rozgałęzia się i angażuje historię po scaleniu

Po scaleniu oddziału widzę, że (używając gitx i gitk) historia gałęzi głównej pobiera wszystkie zatwierdzenia, które zrobiłem do połączonej gałęzi. To znaczy, jeśli mam coś takiego:

master a-b-c-d 
       \z-x-y-- 
       |branch name 

po scaleniu uzyskać:

a-b-c-d-z-x-y 
      |branch name 

Tak, widzę połączony nazwa oddziału podświetlone (używając gitx i gitk), ale co ja liczyłem to coś pokazując dokładnie gdzie commity są wykonywane (do którego oddział), takich jak:

master a-b-c-d--------M-- 
       \-z-x-y-/ 
       |branch name 

więc jestem spodziewając się zobaczyć commit „M”, który reprezentuje seryjnej robiłem, nie do opanowania Wygląda na to, że wszystkie zobowiązania, które zrobiłem w nowym oddziale, zostały zrobione, aby opanować.

Czy moje oczekiwanie jest prawidłowe? Czy jest to normalne zachowanie w postaci git?

Odpowiedz

29

To jest normalne zachowanie Git. Robisz coś, co nazywa się "szybkim przewijaniem", ponieważ twoja gałąź jest ściśle przed oddziałem master.

Jeśli naprawdę chcesz zachować historię oddziału (choć nie polecam, nie przejmuj się), możesz użyć git merge --no-ff, aby zmusić go do utworzenia zatwierdzenia scalenia, nawet jeśli może wykonać szybką aktualizację.

+5

Istnieje pewna korzyść z używania '--no-ff' przy łączeniu gałęzi. Głównym z nich jest to, że jest to jednorazowy powrót do wycofania tej funkcji. –

+0

Wielkie dzięki za pomocne informacje. @Cameron, czy możesz wyjaśnić, dlaczego nie jest to zalecane? i czy mogę "przedstawić" wszystkie moje stare połączenia? (to w zasadzie dlatego, że muszę napisać raport o moim projekcie, więc pomocne byłoby zrzuty z moich oddziałów) – Ansd

+2

@Ans: Nie polecam go po prostu dlatego, że nigdy nie znalazłem dla niego zastosowania. Wolę, aby historia 'master' była tak prosta i linearna, jak to tylko możliwe, i nigdy nie musiałem przejmować się gałęzią cech, gdy została ona scalona. @Dan Ray o przywracaniu jednego strzału jest ważny, więc może to być dobry powód użycia 'no-ff'. Prawdopodobnie nie będzie można łatwo zregenerować historii oddziału, ale jeśli nadal masz wszystkie stare gałęzie, możesz ręcznie wygenerować gałąź, która scala wszystkie funkcje w tej samej kolejności, w której zostały scalone w 'master'. –