Как `git pull --rebase` правильно извлекает исправленные коммиты? - PullRequest
0 голосов
/ 27 июня 2018

У меня есть настройка, в которой я кодирую на своей машине local и вытаскиваю ее из коробки dev, чтобы проверить ее. Скажем, я создаю коммит A на ветке foo на local и создаю ветку foo на устройстве dev, для которого восходящий поток установлен как local/foo. Если я сделаю git pull из ветви foo на устройстве dev, дерево ветви dev/foo станет таким же, как local/foo.

Но если я сейчас исправлю коммит A в local/foo, git pull из ветви foo в поле dev вызывает конфликт слияния. Принимая во внимание, что git pull --rebase работает правильно и не дублирует коммит A дважды на dev/foo.

git help pull говорит, что:

       -r, --rebase[=false|true|merges|preserve|interactive]
           When true, rebase the current branch on top of the upstream branch after 
fetching. If there is a remote-tracking branch corresponding to the upstream branch 
and the upstream branch was rebased since last fetched, the rebase uses that 
information to avoid rebasing non-local changes.

Я понял, что в приведенном выше сценарии применяется последняя строка, но я не понимаю, каковы предварительные условия или как они работают?

Объяснение было бы очень полезно. Спасибо

1 Ответ

0 голосов
/ 27 июня 2018

Это из-за разницы слияния и перебазирования.

"Обычный" git pull сначала извлекает изменения, а затем объединяет их в локальное состояние, в то время как git pull --rebase извлекает изменения и затем перебазирует локальное состояние сверху из пульта.

При объединении рассматриваются только два состояния проекта - «наше» и "их" сторона слияния, плюс, когда это возможно, их так называемая «база слияния» - последний общий коммит эти линии развития разделяются.

Перебазирование, напротив, сначала сбрасывает "нашу" сторону указать на тот же коммит "их" сторона имеет на своем кончике а то применяет каждый "наш" коммит "свой" не имеет индивидуально - в виде текстовых фрагментов, по одному.

У этого может быть больше шансов не вызывать конфликтов как локальные изменения повторно применяются на пульте обновлены состояние постепенно.

...