Я просто не понимаю этого. Я много читал в Интернете и в книгах, и что-то просто не оставалось у меня в голове. Может кто-нибудь, пожалуйста, дайте мне фиктивную версию следующего:
- git fetch vs pull
- git merge vs rebase
Я просто не понимаю этого. Я много читал в Интернете и в книгах, и что-то просто не оставалось у меня в голове. Может кто-нибудь, пожалуйста, дайте мне фиктивную версию следующего:
fetch будет загружать любые изменения из ветки удаленного *, обновляя данные вашего репозитория, но оставляя вашу локальную ветвь * неизменной.
pull выполнит fetch и дополнительно merge изменения в вашей локальной ветки.
Какая разница? pull обновляет локальную ветвь с изменениями от вытащенной ветки. A fetch не продвигает вашу локальную ветвь.
Учитывая следующую историю:
C---D---E local
/
A---B---F---G remote
merge объединяет две истории развития вместе. Это происходит путем повторения изменений, произошедших на вашей локальной ветке после того, как они расходятся поверх удаленной ветки и записывают результат в новую фиксацию. Эта операция сохраняет родословную каждой фиксации.
Эффект a merge будет:
C---D---E local
/ \
A---B---F---G---H remote
rebase возьмет коммиты, которые существуют в вашей локальной ветки, и повторно примените их поверх удаленной ветки. Эта операция перезаписывает предков ваших локальных коммитов.
Эффект a rebase будет:
C'--D'--E' local
/
A---B---F---G remote
Какая разница? A merge не изменяет родословную коммитов. A rebase
переписывает родословную ваших локальных коммитов.
* В этом объяснении предполагается, что текущая ветвь является локальной ветвью, а ветвь, указанная как аргумент fetch, pull, merge или rebase, является удаленной ветвью. Это обычный случай. pull, например, загрузит любые изменения из указанной ветки, обновит ваш репозиторий и merge изменения в текущую ветку.
Fetch vs Pull
Git fetch просто обновляет ваши данные репо, но притяжение git в основном выполняет выборку, а затем объединяет ветвь, вытащенную
В чем разница между 'git pull' и 'git fetch'?
Слияние с Rebase
из Atlassian SourceTree Blog, Объединить или перезагрузить:
Слияние объединяет две линии развития, сохраняя при этом предки каждой истории фиксации.
В отличие от этого, rebasing унифицирует линии развития путем повторной записи изменения из ветки источника, чтобы они отображались как дети из пункт назначения - эффективно притворяется, что эти написанное сверху ветки назначения.
Кроме того, проверьте Изучите git Ветвление, которое является хорошей игрой, только что отправленной в HackerNews (ссылка на сообщение) и учит много разветвлений и слияния. Я считаю, что это будет очень полезно в этом вопросе.
pull vs fetch:
То, как я это понимаю, заключается в том, что git pull - это просто git fetch, за которым следует git merge. То есть вы извлекаете изменения из удаленной ветки, а затем объединяете их в текущую ветвь.
merge vs rebase:
Слияние будет выполняться по команде; объединить различия между текущей ветвью и указанной ветвью (в текущую ветку). То есть команда git merge another_branch будет слить another_branch в текущую ветку.
Ребаза работает немного по-другому и выглядит круто. Скажем, вы выполняете команду git rebase another_branch. Git сначала найдет последнюю общую версию между текущей ветвью и another_branch. То есть точка до разветвления ветвей. Затем Git переместит эту расходящуюся точку на головку another_branch. Наконец, все коммиты в текущей ветке, начиная с исходной расходящейся точки, воспроизводятся из новой расходящейся точки. Это создает очень чистую историю, с меньшим количеством ветвей и слияниями.
Однако, это не без ловушек! Поскольку история версий "перезаписана", вы должны сделать это, только если коммиты существуют только в локальном репозитории Git. То есть: никогда не делайте этого, если вы переместили коммиты на удаленное репо.
Объяснение по переустановке в этой онлайн-книге неплохое, с легко понятными иллюстрациями.
вытащить с перезагрузкой вместо слияния
Я использую rebase довольно много, но обычно он в сочетании с pull:
git pull --rebase
будет извлекать удаленные изменения, а затем rebad вместо merge. То есть он будет воспроизводить все ваши локальные коммиты с момента последнего притяжения. Я нахожу это намного более чистым, чем обычное нажатие слияния, которое создаст дополнительную фиксацию слияниями.