Główny powód tego, co widzę, jest następujący:
- Interfejs GitHub do łączenia żądań ściągania obecnie (październik 2015 r.) Nie pozwala na edycję pierwszego wiersza komunikatu zatwierdzenia, zmuszając go do
Merge pull request #123 from joebloggs/fix-snafoo
- Interfejs GitHub do przeglądania historii zatwierdzeń obecnie nie pozwala na przeglądanie historii oddziału z
--first-parent
punktu widzenia
- Interfejs GitHub do przeglądania winy za plik obecnie nie pozwala na przeglądanie winy pliku za pomocą
--first-parent
punktu widzenia (zauważ, że zostało to naprawione tylko w Git 2.6.2, więc możemy wybaczyć GitHub za to, że go nie ma dostępny)
Kiedy więc połączysz wszystkie trzy powyższe sytuacje, otrzymasz sytuację, w której łączenie niesprawdzonych zatwierdzeń wygląda brzydko z interfejsu użytkownika GitHub.
Twoja historia ze zgniecionymi zobowiązaniami będzie wyglądać jak
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... Hotfix for android display issue
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... Implemented pop-up to select language
Podczas gdy bez zgniecionych zobowiązań historia będzie wyglądać jak
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... hotfix for #5849564648
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
Gdy masz dużo zatwierdzeń w śledzeniu PR, w którym nastąpiła zmiana, może to być koszmar, jeśli ograniczysz się do korzystania z interfejsu GitHub .
Na przykład, gdzieś w pliku znajduje się odwołanie do wskaźnika zerowego, więc mówisz „kto to zrobił i kiedy? Na jakie wersje wydania ma to wpływ?”. Następnie wędrujesz do widoku winy w interfejsie GitHub i widzisz, że linia została zmieniona789fdfffdf
... „och, ale poczekaj sekundę, linia właśnie zmieniała swoje wcięcie, aby pasowała do reszty kodu”, więc teraz musisz przejść do stanu drzewa dla tego pliku w zatwierdzeniu nadrzędnym i ponownie odwiedzić strona z winami ... w końcu znajdziesz zatwierdzenie ... to zatwierdzenie sprzed 6 miesięcy ... "och **** to może mieć wpływ na użytkowników przez 6 miesięcy" mówisz ... ach, ale poczekaj, to zatwierdzenie był w rzeczywistości w żądaniu ściągnięcia i został połączony dopiero wczoraj i nikt jeszcze nie wydał nowego wydania ... „Cholera, ludzie, że łączysz zobowiązania bez marnowania historii” to krzyk, który zwykle można usłyszeć po około 2 lub 3 wyprawach z archeologii za pośrednictwem Interfejs GitHub
Zastanówmy się teraz, jak to działa, jeśli używasz wiersza polecenia Git (i super-niesamowite 2.6.2, które ma poprawkę git blame --first-parent
)
- Jeśli korzystasz z wiersza polecenia Git, będziesz w stanie całkowicie kontrolować komunikat zatwierdzenia scalania, a zatem zatwierdzenie scalania może mieć ładną linię podsumowania.
Tak wyglądałaby nasza historia zmian
$ git log
1256556316... #423 Added new slideshow feature
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... #324 Hotfix for android display issue
787g8fgf78... hotfix for #5849564648
f56556316e... #28 Implemented pop-up to select language
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
Ale możemy też
$ git log --first-parent
1256556316... #423 Added new slideshow feature
56556316ad... #324 Hotfix for android display issue
f56556316e... #28 Implemented pop-up to select language
(Innymi słowy: Git CLI pozwala ci zjeść ciasto i zjeść je)
Teraz, gdy natrafimy na problem ze wskaźnikiem zerowym ... cóż, po prostu używamy git blame --first-parent -w dodgy-file.c
i natychmiast dostajemy dokładne zatwierdzenie, w którym odwołanie do wskaźnika zerowego zostało wprowadzone do gałęzi głównej, ignorując proste zmiany białych znaków.
Oczywiście, jeśli wykonujesz scalenia za pomocą interfejsu GitHub, to git log --first-parent
jest naprawdę kiepski dzięki GitHub wymuszającemu pierwszy wiersz komunikatu zatwierdzenia scalania:
1256556316... Merge pull request #423 from jrandom/add-slideshows
56556316ad... Merge pull request #324 from ahacker/fix-android-display
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
Krótko mówiąc:
Interfejs GitHub (październik 2015 r.) Ma szereg niedociągnięć w sposobie łączenia żądań ściągania, prezentacji historii zatwierdzeń i przypisywania informacji o winie. Obecnie najlepszym sposobem na włamanie się do tych usterek w interfejsie GitHub jest poproszenie ludzi o zmiażdżenie swoich zobowiązań przed połączeniem.
Interfejs Git CLI nie ma tych problemów i możesz łatwo wybrać widok, który chcesz zobaczyć, dzięki czemu możesz zarówno odkryć powód, dla którego dokonano konkretnej zmiany w ten sposób (patrząc na historię niezakwestionowanych zmian), a także zobacz skutecznie zgniecione zatwierdzenia.
Post Script
Ostatnim powodem często cytowanym przy zatwierdzaniu zgniatania jest ułatwienie backportowania ... jeśli masz tylko jedno zatwierdzenie do tylnego portu (tj. Zgniecione zatwierdzenie), łatwo jest wybrać cherry ...
Cóż, jeśli patrzysz na historię gitów git log --first-parent
, możesz po prostu wybrać zatwierdzenia scalania. Większość ludzi ma mylące zatwierdzenia scalania podczas pobierania, ponieważ musisz określić -m N
opcję, ale jeśli dostałeś zatwierdzenie git log --first-parent
, wiesz, że jest to pierwszy rodzic, którego chcesz śledzić, więc będziegit cherry-pick -m 1 ...