Git: настройка merge.ff прерывает ускоренное слияние навсегда

Я сталкиваюсь с очень странной проблемой в Git (версия 2.10.1 (Apple Git-78)).

Кажется, если я однажды установил merge.ff в false в конфигурации локального репо пути назад для этого репо нет. Я просто не могу сбросить это.

Вот шаги для воспроизведения:

git init

# Set merge.ff
git config --add merge.ff false

# Add some content and commit.
echo '.' >> file.txt
git add file.txt
git commit -am "commit"

# Create a new branch.
git branch feature

git checkout feature
echo '.' >> file.txt
git commit -am "commit"
git checkout master
git merge feature

Это слияние создает коммит с сообщением - как и ожидалось.

Теперь я сбрасываю настройку и ожидаю, что будущие коммиты ускоренной перемотки не создадут дополнительных коммитов. Но удивительно, что это не работает.

git config --unset-all merge.ff

git checkout feature
echo '.' >> file.txt
git commit -am "commit"
git checkout master
git merge feature

Я предполагаю, что это слияние не должно создавать коммит, потому что нет merge.ff настройки, поэтому должно применяться значение по умолчанию. Но коммит создается.

Чего я хочу: наличие быстрой перемотки снова заставляет работать в моем репо. Есть ли способ получить это?

1 ответ

Я предполагаю, что это слияние не должно создавать коммит, потому что нет настройки merge.ff, поэтому следует применять значение по умолчанию. Но коммит создается.

По умолчанию выполняется ускоренная перемотка вперед, если это возможно, в противном случае выполняется коммит слияния.

Коммит слияния необходим сейчас, потому что график выглядит так:

* 4667bf7 (feature) commit
| *   6663675 (HEAD -> master) Merge branch 'feature'
| |\  
| |/  
|/|   
* | c12b7b3 commit
|/  
* 3c62604 commit

База слияния master а также feature это совершить c12b7b3...:

$ git merge-base master feature
c12b7b3f68caf419c3088fae293c57cfed147f34

и кончик feature является 4667bf7с кончиком master являющийся 6663675, Ни один из этих двух советов не равен базе слияния, поэтому слияние не требуется.

Ваша конфигурация в порядке:

$ git config --get merge.ff
$ cat .git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[merge]

(Это довольно неприятно, но безвредно, что git config оставляет поддельное пустым [merge] раздел там; каждый дополнительный git config merge.<whatever> добавляет еще один, когда есть пустой.)

Другие вопросы по тегам