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>
добавляет еще один, когда есть пустой.)