Ответ 1
Я узнал, что это было:
$ git fetch upstream
$ git merge upstream/master
У меня есть локальная ветвь проекта ( "configUpdate" ), которую я раскошелил из другого проекта, и я набросил на него изменения и хотел бы объединить изменения, которые они внесли в мой локальная ветвь.
Я пробовал
git pull --rebase origin configUpdate
но он не схватил последние изменения - как я могу объединить эти два? (также для бонусных очков, что я сделал с командой pull --rebase
?)
Я узнал, что это было:
$ git fetch upstream
$ git merge upstream/master
Как насчет (если вы в настоящее время находитесь в configUpdate ветки):
git fetch
git rebase origin/master
В двух словах:
git merge branchname
берет новые коммиты из ветки branchname
и добавляет их в текущую ветку. При необходимости он автоматически добавляет фиксацию "Слияние" сверху.
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 ускорит переадресацию вашего хозяина вверх по течению, а затем примените ваши изменения сверху.
Перейдите в локальную ветвь
> git checkout configUpdate
Объединить удаленный мастер с вашей веткой
> git rebase master configUpdate
Если у вас возникли конфликты, исправьте их и для каждого конфликтующего файла выполните команду
> git добавить [path_to_file/conflicted_file] (например, git добавить приложение/активы/javascripts/test.js)
Продолжить rebase
> git rebase -continue
git rebase, похоже, не работает для меня. После git rebase, когда я пытаюсь нажать на изменения в своем локальном ветки, я продолжал получать сообщение об ошибке ( "hint: Updates были отклонены, потому что конец вашей текущей ветки находится за ее удаленным экземпляром". Интегрируйте удаленные изменения (например, "git pull... ') перед повторным нажатием." ) даже после git pull. Что, наконец, сработало для меня, было git merge.
git checkout <local_branch>
git merge <master>
Если вы новичок, как я, вот хорошая статья в разделе git merge vs git rebase. https://www.atlassian.com/git/tutorials/merging-vs-rebasing