2012-12-24 10 views
58

Podczas git log --decorate --oneline --graph w jednym z naszych repozytoriów krótko przed świętami, okazało się, że pojawiła się następującą strukturę (obrócone podkreślić wątpliwy motyw świąteczny):Dlaczego moja historia git wygląda jak choinka?

redacted git log output, rotated to look like a Christmas tree

Skąd ten wzór na wykresie popełnienia powstać ?

To jest celowo trochę głupie, oczywiście, ale jest tu interesujący punkt - często trudno jest zobaczyć, jak interpretować poszczególne wzory na wykresie zatwierdzenia, gdy widzisz je w swojej przeglądarce historii git.

+6

* "Zaraz dalej: dlaczego mój blat wygląda jak choinka?" * – Amber

+33

* "W następnej kolejności: dlaczego moja choinka wygląda jak historia git?" * –

+0

Choinka nie byłaby kompletny bez niektórych gwiazdek ... '*' '*' '*' – ADTC

Odpowiedz

30

W tym przypadku sytuacja polegała na tym, że na końcu gałęzi master w jednym klonie repozytorium wykonano polecenie "Unieruchomienie". Następnie git pull był uruchamiany wiele razy w tym samym repozytorium, w okresie, kiedy było dużo nowych prac wykonywanych pod prąd. (W tym przypadku stało się tak ze względu na zautomatyzowany skrypt, ale to samo może się zdarzyć, gdy programista po prostu wielokrotnie wciąga gałąź, aby zachować ją na bieżąco, a nie, powiedzmy, na zmianę).

Każde przeciągnięcie, gdy pojawiały się nowe zatwierdzenia, tworzyło nowe zatwierdzenie scalania, ponieważ zawsze było zatwierdzenie w master, które nie było w stanie poprzedzającym.

Ostatecznie historia z głównego repozytorium w tym repozytorium została wypchnięta w górę, więc inni deweloperzy zobaczyli, że ta struktura na wykresie zatwierdzenia pojawia się nagle, gdy zostaną pobrane z repozytorium.

Jeśli masz historię o podobnej strukturze i chcesz dowiedzieć się, który commit/programista spowodował ten problem, możesz po prostu spojrzeć w dół na linię z gwiazdami (w zasadzie po pierwszym rodzicu każdego scalenia) aż dojdziesz do pierwszego niezamierzonego zatwierdzenia. W przypadku na zdjęciu było to b275805 - zatwierdzenie, które powinno zostać wcześniej przekazane.

Jest to jeden z powodów, dla których ludzie często wolą używać git pull --rebase - dzięki temu twoja historia jest nieskomplikowana.

Aby dać kredyt tam, gdzie należy, mój kolega Matthew Somerville zauważył to i ustalił, co się dzieje.

+4

Doskonały. +1. Miałem tylko świadomość potencjalnego problemu "pull -rebase" (http://stackoverflow.com/questions/2590260/when-will-git-pull-rebase-get-me-in-to-ouble/2590276 # 2590276), ale tutaj to by naprawdę pomogło. – VonC

Powiązane problemy