в чем разница между git pull, git fetch и git rebase?

В чем разница между git pull, git fetch и git rebase? Я чувствую, что тянуть и извлекать - одно и то же.


person Lakmal Vithanage    schedule 12.02.2017    source источник
comment
stackoverflow.com/questions/292357 /   -  person jophab    schedule 12.02.2017
comment
Предлагаю вам прочитать Pro Git. Первые три главы охватывают 95% того, что вам нужно ежедневно, включая ответ на ваш вопрос.   -  person Code-Apprentice    schedule 12.02.2017
comment
git pull --rebase эквивалентен двум последним   -  person Pockets    schedule 12.02.2017


Ответы (1)


Получить: обновите локальные, добавив удаленные изменения, но не объединяйте ни с одним локальным филиалом.

По запросу: обновите локально и объедините изменения с помощью current-branch.

  • git fetch: получить последние изменения из источника (без слияния)

  • git pull = git fetch + git merge

  • Если вы переустановите ветку feature на ветку master. git rebase master, ветка feature commits/changes останется наверху.

    Допустим, у вас есть две фиксации в ветке master (A -> C) и две фиксации в ветке feature (B -> D).

    Предположим, вы находитесь в feature ветке (git checkout feature). Теперь, если вы merge master, тогда история коммитов:

    (previous commit) - A -- C       <- master
                      \        \
                        B -- D -- M   <- feature
    

    Здесь M для new-merge-commit-sha.

    Для rebase master история фиксации: (A -> C -> B' -> D').

person Sajib Khan    schedule 12.02.2017
comment
Обычно вы переустанавливаете feature на master, а не наоборот. - person Code-Apprentice; 12.02.2017
comment
И git merge master приведет к гораздо более сложной истории коммитов, чем то, что вы видели. - person Code-Apprentice; 12.02.2017
comment
Согласитесь, @ Code-Apprentice, здесь я попытался показать simple/generic разницу. - person Sajib Khan; 12.02.2017
comment
Сохранять простоту - это нормально, пока она верна. Как у вас здесь, история коммитов неверна в вашем абзаце о git merge. - person Code-Apprentice; 12.02.2017
comment
Также неверна формулировка, описывающая перебазирование. git rebase master переустановит текущую ветку на master. - person Code-Apprentice; 12.02.2017
comment
Да, здесь я предполагаю, что текущая ветка - feature. git checkout feature, git rebase master. Итак, он переставит feature на master. - person Sajib Khan; 12.02.2017
comment
Измените, пожалуйста, свой ответ, чтобы это было сказано. - person Code-Apprentice; 12.02.2017
comment
Я уже ответил на это. "Assume you are in feature branch. Now if you merge master then..." - person Sajib Khan; 12.02.2017
comment
Какое отношение эта цитата имеет к перебазированию? Я говорю о том, если вы переставляете главную ветку в функциональную ветку. git rebase master ... что неверно. Вы не перемещаете главную ветвь в функциональную ветку, а просто переставляете функциональную ветку в главную ветвь. - person Code-Apprentice; 12.02.2017
comment
Понятно (это была ошибка), спасибо. - person Sajib Khan; 12.02.2017
comment
Вам также следует исправить иллюстрации истории коммитов, чтобы показать правильную историю слияния. - person Code-Apprentice; 12.02.2017
comment
Исправлена ​​история коммитов! - person Sajib Khan; 12.02.2017
comment
История фиксации для git merge по-прежнему неверна. История не будет линейной. - person Code-Apprentice; 12.02.2017
comment
Отредактировано. Теперь все в порядке? - person Sajib Khan; 12.02.2017