2013-11-20 4 views
243

У меня есть ветка, называемая dmgr2 (разработка), и я хочу вытащить из ведущей ветки (живой сайт) и включить все изменения в мою ветку развития. Есть лучший способ сделать это? вот что я планировал делать:git pull from master в ветку разработки

git checkout dmgr2 
git pull origin master 

это должно тянуть живые изменения в моей ветке развития, или у меня это не так?

+1

сначала зафиксируйте все свои изменения в ветке dmgr2. а затем укажите мастер 1.git контрольный мастер и затем получите последнее изменение 2.git pull 3.git merge dmgr2 4.git push -u origin master И затем вернитесь к вашему dmgr2 5.git checkout dmgr2 –

+0

Я уже внес все свои изменения в ветку dmgr2, извините забыл добавить, что –

+0

, если я выполню шаг 4, не измените мои изменения в разработке? Я не хочу этого делать –

ответ

360

Шаги, перечисленные будет работать, но есть более длинный путь, который дает вам больше возможностей:

git checkout dmgr2  # gets you "on branch dmgr2" 
git fetch origin  # gets you up to date with origin 
git merge origin/master 

Команда fetch может быть сделано в любой момент до merge, то есть, вы можете поменять порядок выборка и проверка, потому что fetch просто переходит к именованному пульту (origin) и говорит ему: «Дайте все, что у вас есть, что я не делаю», то есть все фиксируются на всех ветвях. Они копируются в ваш репозиторий, но с именем origin/branch для любой ветки с именем branch на пульте дистанционного управления.

На этом этапе вы можете использовать любое средство просмотра (git log, gitk и т. Д.), Чтобы увидеть, «что у них есть», что вы не делаете, и наоборот. Иногда это полезно только для Warm Fuzzy Feelings («ах, да, это на самом деле то, что я хочу»), и иногда это полезно для полного изменения стратегий («whoa, я не хочу, чтобы все это было»).

Наконец, команда merge принимает данное обязательство, что вы можете назвать, как origin/master, и делает все возможное, чтобы принести в этот коммит и его предков, какой бы отрасли вы находитесь, когда вы запускаете merge. Вы можете вставить --no-ff или --ff-only, чтобы предотвратить ускоренную перемотку вперед или слить, только если результат является быстрым, если хотите.

При использовании последовательности:

git checkout dmgr2 
git pull origin master 

команда pull инструктирует мерзавец запустить git fetch, а затем моральным эквивалентом git merge origin/master. Таким образом, это почти так же, как делать два шага вручную, но есть некоторые тонкие различия, которые, вероятно, не слишком относятся к вам. (В частности fetch шаг в ведении pull приносит более толькоorigin/master, и он не обновляет реф в вашем репо: новых фиксаций ветры называют, только с помощью специального FETCH_HEAD ссылки.)

Если вы используете более-явное git fetch origin (то необязательно искать вокруг), а затем git merge origin/master последовательность, вы также можете принести свой собственный местный master до настоящего времени с пультом дистанционного управления, только один fetch перспективы по сети:

git fetch origin 
git checkout master 
git merge --ff-only origin/master 
git checkout dmgr2 
git merge --no-ff origin/master 

например.


Эта вторая часть была изменена, я говорю «фиксированный» -в мерзавец 1.8.4, который теперь обновляет «удаленный филиал» ссылки оппортунистически. (Как отмечалось в релизе, преднамеренное дизайнерское решение пропустить обновление, но выясняется, что больше людей предпочитают, чтобы git обновил его.Если вам нужен старый удаленный филиал SHA-1, он по умолчанию будет сохранен и, следовательно, восстановлен из reflog. Это также позволяет использовать новую функцию git 1.9/2.0 для поиска восходящих реорганизаций.)

+12

Я просто прошу, друг, как бы вы разобрались с первым кодом, который у вас здесь (checkout/fetch/merge)? –

+4

@RichBradshaw: 'git checkout', как правило, неразрушающе, и обычно нет причин для отмены' git fetch', поэтому звучит так, будто вы спрашиваете, как отменить фиксацию слияния. Ответ такой же, как и для других коммитов: либо 'git reset', либо' git revert'. Для * неопубликованных * изменений 'git reset' обычно является лучшим методом; для изменений, которые другие уже имеют, 'git revert' может быть лучше, но см. рекомендации Linus Torvald о возврате слияния: https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a- faulty-merge.txt – torek

+0

Как вы устанавливаете, какую программу просмотра слияния использовать? – PositiveGuy

Смежные вопросы