Как объединить удаленный мастер в локальную ветку - PullRequest
210 голосов
/ 26 августа 2011

У меня есть локальная ветвь проекта ("configUpdate"), которую я забыл из чужого проекта, и я внес в нее множество изменений и хотел бы объединить изменения, которые они внесли в мой местное отделение.

Я пробовал

git pull --rebase origin configUpdate

но он не захватил последние изменения - как я могу объединить эти два? (также для бонусных баллов, что я делал с командой pull --rebase?)

Ответы [ 4 ]

322 голосов
/ 26 августа 2011

Как насчет (при условии, что вы в данный момент используете ветку configUpdate):

git fetch
git rebase origin/master

В двух словах:

  • git merge branchname берет новые коммиты из ветви branchname и добавляет их в текущую ветку. При необходимости он автоматически добавляет коммит "Merge" сверху.

  • git rebase branchname берет новые коммиты из ветки branchname и вставляет их «под» ваши изменения. Точнее, он изменяет историю текущей ветки так, что он основан на подсказке branchname, с любыми изменениями, которые вы внесли поверх этого.

  • git pull в основном совпадает с git fetch; git merge origin/master.

  • git pull --rebase в основном совпадает с git fetch; git rebase origin/master.

Так почему вы хотите использовать git pull --rebase вместо git pull? Вот простой пример:

  • Вы начинаете работать над новой функцией.

  • К тому времени, когда вы будете готовы к внесению изменений, другие разработчики уже выдвинули несколько коммитов.

  • Если вы git pull (который использует слияние), ваши изменения будут похоронены новыми коммитами, в дополнение к автоматически созданному коммиту слияния.

  • Если вы вместо этого git pull --rebase, git быстро перенаправит вашего мастера к восходящему, , а затем примените ваши изменения сверху.

72 голосов
/ 26 августа 2011

Я узнал, что это было:

$ git fetch upstream
$ git merge upstream/master
33 голосов
/ 23 июня 2012

Переключитесь на местный филиал

> git checkout configUpdate

Слияние удаленного мастера с вашей веткой

> git rebase master configUpdate

Если у вас есть какие-либо конфликты, исправьте их и для каждого конфликтующего файла выполните команду

> git add [path_to_file / конфликтаted_file] (например, git add app / assets / javascripts / test.js)

Продолжить ребазинг

> git rebase --continue

12 голосов
/ 06 июля 2017

git rebase, похоже, не работает для меня. После git rebase, когда я пытался перенести изменения в свою локальную ветку, я продолжал получать сообщение об ошибке («Подсказка: обновления были отклонены, потому что конец вашей текущей ветки находится за своим удаленным аналогом. Интегрируйте удаленные изменения (например,« git pull »). .. ') до толкания снова. ") даже после git pull. То, что наконец-то сработало для меня, было git merge.

git checkout <local_branch>
git merge <master> 

Если вы новичок, как я, вот хорошая статья о git merge против git rebase. https://www.atlassian.com/git/tutorials/merging-vs-rebasing

...