Сделать git pull --rebase сохранить слияние

git pull --rebase удаляет нечеткие комманды слияния. Есть ли способ защитить их?

Скажите, как выглядит моя история -

A
| \ 
B  H
|  |
C  G
|  |
D  F
| /
E

(A является фиксацией слияния.)

После a git pull --rebase он становится -

H
|
G
|
F
|
X
|
B
|
C
|
D
|
E

(X - это новые коммиты git pull --rebase, вставленные в мою историю.) - A удаляется.

Я знаю, что вы можете использовать git rebase --preserve-merges для сохранения их с помощью git rebase, но я не вижу способа сохранить их с помощью git pull --rebase.

Ответ 1

вы можете разделить pull на fetch и rebase

git fetch origin master
git rebase origin master --preserve-merges

Ответ 2

Или (для предстоящего git 1.8.5 Q4 2013, теперь поставляемого в git 1.8.5, 2013-11-27):

"git pull --rebase" всегда предпочитал выполнять стандартную фальсификацию выравнивания болота.
Вы можете сказать ему, чтобы он запускал "rebase --preserve-merges", установив для параметра "pull.rebase" значение "preserve".

Итак, достаточно простой конфигурации, чтобы убедиться, что ваш pull --rebase сохраняет слияние:

git config pull.rebase preserve

Подробнее см. 66713ef3 (спасибо Стивен Хаберман):

pull: позволяет извлекать слияния при перезагрузке

Если пользователь работает над мастером и слился в своей ветки функции, но теперь он должен "git pull", потому что мастер перемещен, а pull.rebase их ветвь функции будет сплющена в master.

Это связано с тем, что "git pull" в настоящее время не знает о флаге сброса сохранения rebase, что позволит избежать этого поведения, поскольку вместо этого будет воспроизводиться только комманда слияния ветки функции на новом хозяине и не воспроизводить каждый отдельный commit в ветки признака.

Добавьте опцию --rebase=preserve, которая пройдет по --preserve-merges для rebase.

Также добавьте 'preserve' к допустимым значениям для параметра конфигурации pull.rebase.

Ответ 3

Просто:

git pull --rebase=preserve

От документы:

При установке для сохранения rebase с параметром --preserve-merges, переданным в git rebase, чтобы локально созданные коммиты слияния не были сплющены.