Как получить изменения из другой ветки

99

Я сейчас работаю над featurexветкой. Наша основная ветка называется веткой our-team. С тех пор, как я начал работать featurex, в ветку было внесено больше изменений our-team. Прежде чем я буду настаивать featurexна слиянии, я хотел бы локально получить все изменения из our-teamветки, featurexчтобы я мог убедиться, что все работает должным образом.

Я сделал это локально, чтобы получить все последние изменения из our-team.

git checkout our-team
git pull

Как я могу это сделать?

Энтони
источник
9
Вы задали вопрос очень осознанно и точно. Это упрощает ответ, а также упрощает понимание новичков (таких как я).
douglas.kirschman 09

Ответы:

58

Вы можете использовать rebase , например, git rebase our-teamкогда находитесь в своей веткеfeaturex

Он переместит начальную точку ветки в конец вашей our-teamветки, объединяя все изменения в вашей featurexветке.

JulCh
источник
3
Я буду использовать это в будущем, однако, на этот раз я сделал следующее ... имеет ли это такой же эффект? git checkout our-team git pull git checkout featurex git merge our-team
Энтони
5
Я хотел бы подчеркнуть: если вы сделаете это и у вас нетour-team локальных изменений, вам нужно будет запустить его git fetch && git rebase origin/our-team. Ваши команды предполагают, что репозиторий был обновлен ранее.
Макото
108
  1. перейти в главную ветку our-team

    • git checkout наша команда
  2. вытащить все новые изменения из our-teamветки

    • git pull
  3. иди в свой филиал featurex

    • git checkout featurex
  4. объединить изменения our-teamветки в featurexветку

    • git merge our-team
    • или git cherry-pick,{commit-hash} если вы хотите объединить определенные коммиты
  5. протолкните свои изменения с изменениями our-teamветки

    • git push

Примечание : возможно, вам придется исправить конфликты после объединения our-teamветки в featurexветку перед тем, как нажать

Джад Шахин
источник
где бы git pull мог войти?
chia yongkang
30
git fetch origin our-team

или же

git pull origin our-team

но сначала вы должны убедиться, что вы уже находитесь в ветке, до которой хотите обновить (featurex).

Гейзенберг
источник
8

Вы почти у цели :)

Все, что осталось, это

git checkout featurex
git merge our-team

Это объединит нашу команду в featurex.

Вышеупомянутое предполагает, что вы уже зафиксировали / сохранили свои изменения в featurex, если это не так, вам нужно будет сначала сделать это.

Пьер Фуйю
источник
6

Для других людей, пришедших на этот пост в Google. Есть 2 варианта: объединить или переустановить ветку. Оба работают по-разному, но имеют схожие результаты.

Общепринятый ответ является перебазироваться . Это займет все сделанные коммиты, our-team а затем применит сделанные к ним featurex, предлагая вам объединить их по мере необходимости.

Одно небольшое предостережение при перебазировании заключается в том, что вы теряете / переписываете историю веток, по сути говоря git, что ваша ветка началась не с фиксации 123abc, а с фиксации 456cde. Это будет создавать проблемы для других людей , работающих на ветке, и некоторые дистанционные инструменты будут жаловаться на это. Но если вы уверены в том, что делаете, --forceфлаг нужен именно для этого.

То, что предлагают другие плакаты , - это слияние . Это возьмет featurexветку, в каком бы состоянии она ни находилась, и попытается объединить ее с текущим состоянием our-team, предлагая вам сделать одну большую фиксацию слияния и исправить все ошибки слияния перед нажатием на our-team. Разница заключается в том, что вы подаете ваши featurexкоммиты , прежде чем на our-teamновых фиксаций , а затем фиксируя различия. Вы также не переписываете историю, вместо этого добавляя к ней одну фиксацию вместо того, чтобы переписывать предыдущие.

Оба варианта действительны и могут работать в тандеме. Что обычно (я имею в виду, если вы используете широко распространенные инструменты и методологию, такие как git-flow ), делается для ветки функции, так это слияние ее с основной веткой, часто проходящей через запрос на слияние, и разрешение всех конфликтов. которые возникают в одном (или нескольких) коммитах слияния.

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

CyberFoxar
источник