Разница между git pull --rebase и git pull --ff-only

108

Допустим, origin/masterесть фиксация, A--B--Cа у меня local/masterесть фиксация A--B--D.

Что будет, если я воспользуюсь git pull --rebase?

Что будет, если я воспользуюсь git pull --ff-only?

Есть ли разница в получившемся дереве коммитов?

Нико
источник

Ответы:

132

Что произойдет, если я использую git pull --rebase?

git pull --rebase примерно эквивалентен

git fetch
git rebase origin/master

то есть ваши удаленные изменения ( C) будут применены перед локальными изменениями ( D), в результате получится следующее дерево

A -- B -- C -- D

Что произойдет, если я использую git pull --ff-only?

Это не удастся.

git pull --ff-only соответствует

git fetch
git merge --ff-only origin/master

--ff-onlyприменяет удаленные изменения только в том случае, если они могут быть перенаправлены. От мужчины:

Отказаться от слияния и выйти с ненулевым статусом, если текущий HEAD уже не обновлен или слияние не может быть разрешено как ускоренная перемотка вперед

Поскольку ваши локальная и удаленная ветки разошлись, они не могут быть разрешены с помощью быстрой перемотки вперед и не git pull --ff-onlyбудут работать.

Габриэле Петронелла
источник
Что произойдет, если Dв локальном изменении нет фиксации ? Обе команды будут эквивалентны?
Нико
7
Да, они оба приведут A--B--C.
Габриэле Петронелла
что бы git pull --rebase --ff-onlyделать? (при условии, что есть C&D)
Рафаэль Аккерманн
2
IIRC опция --ff-only просто игнорируется в паре с --rebase
Габриэле Петронелла
5
@BreakingBenjamin полезно, если вы хотите гарантировать линейную историю. По умолчанию pullможно вводить коммиты слияния, тогда как вы можете предпочесть работать только с rebase и ff.
Габриэле Петронелла