Как мне сделать git merge по умолчанию --no-ff --no-commit?

84

Политика компании - использовать --no-ffдля коммитов слияния. Мне лично нравится настраивать сообщения журнала слияния, поэтому я использую --no-commit. Кроме того, я люблю компилировать и тестировать, прежде чем отпустить коммит.

Как сделать --no-ffи --no-commitпо умолчанию для меня для всех веток?

(и за годы, прошедшие с тех пор, как я спросил об этом, я почти всегда доволен фиксацией, поэтому проще разрешить фиксацию по умолчанию, и пока я исправляю или иным образом исправляю что-то, прежде чем делать push, все хорошо...)

Полосы
источник
более старые связанные: stackoverflow.com/questions/2500296/…
cregox

Ответы:

112

Поместите это в $ HOME / .gitconfig:

[merge]
    ff = no
    commit = no

Для этого вы можете использовать git-config:

  git config --global merge.commit no
  git config --global merge.ff no
Уильям Перселл
источник
1
Вы уверены, что это работает? Это не для меня, мне пришлось использовать либо branch.master.mergeoptions="--no-ff", либо merge.ff="no"(см. Ответ ниже)
gaizka
@gaizka Действительно, в 1.7.2 и в 1.7.7.2 не работает. Я постараюсь найти время позже, чтобы проверить более старые версии.
Уильям Перселл
@Stripes с помощью команды git config, она помещает ее в [merge], а не в [core]
Tisch
41

Чтобы установить --no-ff --no-commitповедение слияния по умолчанию, установите для параметров noиспользование:

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

Однако проблема в том, что git pull= git fetch+ git merge. Таким образом, всякий раз, когда вы извлекаете данные с удаленного сервера, вы создаете уродливую фиксацию слияния, тогда как простая перемотка вперед была бы оправдана. Чтобы решить эту проблему, установите pull.ffна yes:

git config --global pull.ff yes
Цзянь
источник
17
Хотя это верно при использовании параметров слияния, следует отметить, что если вы используете merge.ffвместо этого, то он этого не делает - он влияет только на явное слияние, в то время как оттягивание по-прежнему выполняет желаемую перемотку вперед.
Ник
3
Когда я использую merge.ff = no, git pullсоздает коммиты слияния.
Мэтт МакКлюр
3
для решения этой проблемы вы должны использовать git pull --rebase( git-scm.com/docs/git-pull ) или настроить branch.autosetuprebase( git-scm.com/docs/git-config.html )
Cybot
8
или используйтеpull.ff = yes
gabeio 03
20

Начиная с версии 1.7.6 git, вы должны использовать

git config [--global] merge.ff no

"принудительно" использовать --no-ffпри каждом слиянии.

Поведение по умолчанию

git config [--global] merge.ff yes

И с

git config [--global] merge.ff only

он откажется от слияния без перемотки вперед

Gaizka
источник
11

Согласно руководству , вы должны использовать

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

чтобы установить опцию без быстрой перемотки по умолчанию для всех веток с помощью утилиты git-config.

alexglue
источник