Naprawdę nigdy nie myślę o czasach, w których będę używał git merge
zamiast git rebase
i , a nie chcę mieć zatwierdzenie. Czy jest jakiś sposób, aby skonfigurować git, aby domyślnie mieć szybkie przekazywanie? Fakt, że istnieje opcja --ff
, sugerowałby, że istnieje sposób, ale nie mogę tego znaleźć w dokumentacji.Czy mogę zlecić szybkie przekazywanie dalej domyślnie w git?
Odpowiedz
Tak, istnieje --no-ff
. Możesz skonfigurować opcje scalania dla każdego oddziału, np.
git config branch.master.mergeoptions "--no-ff"
dodaje następujące do pliku $(REPO)/.git/config
:
[branch "master"]
mergeoptions = --no-ff
Przypis: mówienie z mojego doświadczenia wynika, że w końcu znalazł przejście do przodu na starcie był głównie pomocne dla początkujących git - jednak gdy poczujesz, jak przepływy pracy i koncepcje zaczynają tonąć, zdecydowanie nie chcesz zamazywać wykresu logu z tonami bezsensownych "połączonych zdalnych zatwierdzeń typu" blarf ".
Ach, przypuszczam, że wtedy szukałem w niewłaściwym miejscu. Dzięki! –
Uczenie się jest trochę jak wspinaczka górska; ale zamiast zaczynać od małych klifów i wspinać się na trudniejsze, git sprawia, że wspinasz się na tę samą górę raz za razem, tylko za każdym razem spadając na różne wysokości, za każdym razem tak samo zaskoczony, że linia życia nie była przywiązana. – conny
@conny - Myślę, że to moja nowa ulubiona cytat o git! –
Wygląda na to, że wątek nadal oczekuje na pytanie: jak to zrobić globalnie (tj. We wszystkich gałęziach)? W przypadku rekordów możemy użyć następującego:
git config --add merge.ff false
... w celu zastosowania go do wszystkich oddziałów w bieżącym repozytorium. Aby uczynić go zastosować do wszystkich oddziałów w wszystkie repozytoria gdzie ktoś ma nie uruchomić go bez opcji --global
(zastępują lokalne ustawienia globalne) uruchomić to:
git config --global --add merge.ff false
Z documentation (szukaj merge.ff) :
merge.ff
domyślnie git nie tworzy dodatkowy scalającej podczas scalania commit, który jest potomkiem obecny popełnić. Zamiast tego końcówka bieżącej gałęzi jest szybko przekazywana dalej. Po ustawieniu wartości false ta zmienna mówi gitowi, aby w takim przypadku utworzył dodatkowe zatwierdzenie scalania (równoważne daniu opcji--no-ff
z wiersza poleceń). Po ustawieniu na only dozwolone są tylko takie szybkie przewijanie do przodu (co jest równoważne z podaniem opcji--ff-only
z wiersza poleceń).
Uwaga:' merge.ff 'został wprowadzony w Git 1.7.6. Nie działa w starszych wersjach. –
Dla osób korzystających z Git 1.7.6 jest to najlepsze i najprostsze rozwiązanie. –
Używam tego razem z aliasem 'puff =" pull --ff --ff-only "' – stigi
Czytając wątek odpowiedzi skończyło się stosując następujące dwie opcje
git config --global pull.ff only # Disallows non ff merges on pull. Overrides merge.ff when pulling
git config --global merge.ff false # even create extra merge commit when fast forward merge would be possible
tylko luźno związane Ja również znaleźć to ustawienie pozwala uniknąć kłopotów podczas ściągania
git config --global pull.rebase # set up pull to rebase instead of merge
używam 'seryjnej 'cały czas dla oddziałów, które nie wykonały żadnych przydziałów z pilota, aby je szybko przesłać dalej. Wydaje się, że jest to najprostszy i najbezpieczniejszy sposób. Jestem ciekaw, oczywiście masz przypadek użycia. Dlaczego miałbyś kiedykolwiek chcieć utworzyć commit merge, gdy nie ma żadnych zatwierdzeń po jednej stronie oddziału? –
Używam oddziałów do tworzenia logicznego grupowania zatwierdzeń. Więc jeśli dokonam scalenia, jest to w zasadzie sposób na powiedzenie "te zobowiązania idą w parze". Możesz prawie myśleć o tym jako o ubogim interaktywnym rebase i squasha.:-) –
Wyłączenie szybkiego przekazywania jest niezwykle przydatne, szczególnie gdy podążamy za modelem takim jak [A successful Git branching model] (http://nvie.com/posts/a-successful-git-branching-model/) – Steiny