Jak ustawić domyślną wartość git merge na --no-ff --no-commit?

84

Polityka firmy polega na stosowaniu --no-ffdo zatwierdzeń scalania. Osobiście lubię dostosowywać komunikaty dziennika scalania, więc używam --no-commit. Poza tym lubię faktycznie kompilować i testować, zanim zwolnię zatwierdzenie.

Jak ustawić --no-ffi --no-commitustawić wartość domyślną dla wszystkich oddziałów?

(i nauczyłem się przez lata, odkąd o to zapytałem, prawie zawsze jestem zadowolony z zatwierdzenia, więc łatwiej jest zezwolić mu na domyślne zatwierdzenie i pod warunkiem, że poprawię lub w inny sposób naprawię rzeczy przed wykonaniem push, wszystko dobrze...)

Paski
źródło
starsze pokrewne: stackoverflow.com/questions/2500296/ ...
cregox

Odpowiedzi:

112

Umieść to w $ HOME / .gitconfig:

[merge]
    ff = no
    commit = no

Możesz użyć git-config, aby to zrobić:

  git config --global merge.commit no
  git config --global merge.ff no
William Pursell
źródło
1
Czy na pewno to działa? To nie dla mnie, musiałem użyć albo branch.master.mergeoptions="--no-ff", albo merge.ff="no"(patrz odpowiedź poniżej)
gaizka
@gaizka Rzeczywiście, w 1.7.2 i 1.7.7.2 to nie działa. Postaram się trochę później sprawdzić starsze wersje.
William Pursell
@Stripes używając polecenia git config, umieszcza je w [merge], a nie [core]
Tisch
41

Aby --no-ff --no-commitustawić domyślne zachowanie scalania, ustaw opcje na noużywanie:

git config --global merge.ff no
git config --global merge.commit no

Jednak problem polega na tym, że git pull= git fetch+ git merge. Więc za każdym razem, gdy pobierasz ze zdalnego serwera, tworzysz brzydkie zatwierdzenie scalające, gdy uzasadnione byłoby proste przewijanie do przodu. Aby rozwiązać ten problem, należy ustawić pull.ffna yes:

git config --global pull.ff yes
Jian
źródło
17
Chociaż jest to prawdą w przypadku korzystania z opcji scalania, należy zauważyć, że jeśli merge.ffzamiast tego używasz, to nie robi tego - wpływa tylko na jawne scalenia, podczas gdy ciągnięcia nadal wykonują pożądane szybkie przewijanie do przodu.
Nick,
3
Kiedy używam merge.ff = no, git pulltworzy komendy scalające.
Matt McClure
3
aby rozwiązać ten problem, użyj git pull --rebase( git-scm.com/docs/git-pull ) lub skonfiguruj branch.autosetuprebase( git-scm.com/docs/git-config.html )
Cybot
8
lub użyjpull.ff = yes
gabeio
20

Od wersji 1.7.6 gita powinieneś używać

git config [--global] merge.ff no

„wymuszać” używanie --no-ffw każdym scalaniu.

Zachowanie domyślne to

git config [--global] merge.ff yes

I z

git config [--global] merge.ff only

odmówi połączeń bez przyspieszania do przodu

gaizka
źródło
11

Zgodnie z instrukcją , powinieneś użyć

$ git config [--global] merge.ff false

aby ustawić domyślnie opcję no-fast-forward dla wszystkich gałęzi za pomocą narzędzia git-config.

alexglue
źródło