Chciałbym przedstawić inną perspektywę tego, co tak naprawdę oznacza „git pull --rebase”, ponieważ wydaje się, że czasami się gubi.
Jeśli kiedykolwiek korzystałeś z Subversion (lub CVS), możesz być przyzwyczajony do zachowania „svn update”. Jeśli masz zmiany do zatwierdzenia, a zatwierdzenie nie powiedzie się, ponieważ zmiany zostały wprowadzone wcześniej, „svn update”. Subversion przechodzi przez scalenie wcześniejszych zmian z twoimi, potencjalnie powodując konflikty.
To, co właśnie zrobił Subversion, było zasadniczo „pull -rebase”. Przeformułowanie lokalnych zmian w stosunku do nowszej wersji jest częścią „zmiany”. Jeśli zrobiłeś „svn diff” przed nieudaną próbą zatwierdzenia, a następnie porównujesz wynikowy diff z wyjściem „svn diff” później, różnica między tymi dwoma różnicami jest tym, co zrobiła operacja zmiany wartości.
Główną różnicą między Git i Subversion w tym przypadku jest to, że w Subversion „twoje” zmiany istnieją tylko jako niezaangażowane zmiany w kopii roboczej, podczas gdy w Git masz faktyczne zatwierdzenia lokalnie. Innymi słowy, w Git rozwinęliście historię; Twoja historia i historia górna są rozbieżne, ale masz wspólnego przodka.
Moim zdaniem, w normalnym przypadku posiadania lokalnego oddziału po prostu odzwierciedla upstream oddział i robi na nim ciągły rozwój, właściwą rzeczą do zrobienia jest zawsze „--rebase”, bo to jest to, czego semantycznie faktycznie robi . Ty i inni wyrywacie się z zamierzonej liniowej historii oddziału. Fakt, że ktoś inny naciskał nieco przed twoją próbą pchnięcia, jest nieistotny i wydaje się, że każdy taki przypadek pomiaru czasu przynosi efekt przeciwny do skutku, łącząc się w historii.
Jeśli z jakiegoś powodu odczuwasz potrzebę bycia filią, jest to inna sprawa. Ale chyba, że masz konkretne i aktywne pragnienie przedstawienia swoich zmian w formie scalenia, moim zdaniem domyślne zachowanie powinno brzmieć „git pull --rebase”.
Rozważ inne osoby, które muszą obserwować i rozumieć historię Twojego projektu. Czy chcesz, aby historia była zaśmiecona setkami połączeń w całym miejscu, czy może chcesz tylko kilka wybranych połączeń, które reprezentują prawdziwe połączenia celowych rozbieżnych wysiłków rozwojowych?