Понимание «git pull --rebase» против «git rebase»

Согласно моему пониманиюgit pull --rebase origin master, это должно быть эквивалентно выполнению следующих команд:

(from branch master):  $ git fetch origin
(from branch master):  $ git rebase origin/master

Кажется, я нашел случай, когда это работает не так, как ожидалось. В моей рабочей области у меня есть следующие настройки:

веткаorigin/master справочная веткаmaster на удаленномoriginветкаmaster настроен на отслеживаниеorigin/master, и являетсяпозади мастер по нескольким коммитам.веткаfeature настроен для отслеживания местного отделенияmaster, а такжевпереди изmaster несколькими коммитами.

Иногда я теряю коммиты, выполняя следующую последовательность шагов

(from branch master):  $ git pull --rebase
(from branch master):  $ git checkout feature
(from branch feature): $ git pull --rebase

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

(from branch feature): $ git reset --hard HEAD@{2} # rewind to before second git pull
(from branch feature): $ git rebase master

Коммиты были применены правильно, и мои новые коммиты наfeature все еще присутствуют. Это, кажется, прямо противоречит моему пониманию того, какgit pull работает, еслиgit fetch . делает что-то незнакомое, чем я ожидал.

К сожалению, это не на 100% воспроизводимо для всех коммитов. Когда он работает для коммита, он работает каждый раз.

Замечания: мойgit pull --rebase здесь на самом деле следует читать как--rebase=preserve, если это имеет значение. У меня есть следующее в моем~/.gitconfig:

[pull]
    rebase = preserve

Ответы на вопрос(1)

Ваш ответ на вопрос