2012-01-11 2 views
3

Я хочу «синхронизировать» удаленную ветвь с головой, так что, когда я, наконец, солью ее, это не будет головной болью. Таким образом, я хочу попробовать потянуть изменения головы в свою ветку, чтобы увидеть, насколько она отличается.Git: Управление ветвями

Как я могу выполнить следующий рабочий процесс в Git?

  1. Оформить заказ удаленной веткой.
  2. Как только я проверю это, потяните за собой изменения в голове.
  3. отредактируйте ветку
  4. нажмите на ветку, которая теперь очень похожа на HEAD, назад к удаленной версии той же ветви (без влияния на голову).

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

ответ

4

Это все довольно основной материал:

# make sure your notion of the remote is up to date 
git fetch origin 
# create and check out a branch, at the same place as the remote master branch 
git checkout -b origin-master origin/master 
# merge your local master 
git merge master 
# test, edit away, hack hack hack 
git add ... 
git commit ... 
# push back to origin 
git push origin origin-master:master 

Терминология отмечает:

  • Натяжение представляет собой сочетание извлекая и слияния. Когда вы работаете с локальными филиалами, нет необходимости извлекать, поэтому вы объединяетесь, а не тянете.

  • HEAD не означает, что вы думаете, что это значит. (Возможно, вы являетесь человеком cvs/svn.) HEAD - это только что зафиксированное в данный момент фиксация (обычно называемое именем ветки). Таким образом, вы не объединяете HEAD, вы объединяете эту ветку. Я назвал его хозяином здесь.

Что касается вашего вопроса о лучших рабочих процессах, чтобы сделать то же самое ... хорошо, это довольно сложно ответить. Ваши цели немного неоднозначны. Вы сказали «медленно» синхронизировать и ссылаться на «окончательно слияние», но шаги, которые вы наметили, делают все сразу, поэтому ... ну, все это слилось. Больше нечего делать. Если вы хотите сделать это постепенно, вы можете просто повторить шаги, которые я дал, выбрав промежуточные фиксации в истории, чтобы объединиться каждый раз. Также немного непонятно, в каком направлении вы хотите слияния. Возможно, вы действительно хотели начать с своего филиала и объединить в него удаленные материалы?

git checkout -b master-merging master 
git fetch origin 
git merge origin/master 
# test, hack, commit, push... 
git push origin master-merging:master 

Или с возрастающими слияниями:

git checkout -b master-merging master 
git fetch origin 
git merge origin/master~20 # 20 commits before origin/master 
# test, hack, commit 
git merge origin/master~10 # 10 commits before origin/master 
# test, hack, commit 
git merge origin/master 
# test, hack, commit, push... 
+0

Хм. Это очень полезно, но я не уверен, где находится «ветка»? Кажется, все, что вы делаете в мастер? – jayunit100

+0

Строка 'git checkout -b', как указано в комментарии выше, создает ветку. Я назвал его «origin-master», чтобы указать, что он представляет собой ведущую ветвь оригинала. – Cascabel

+0

Обычно мои ветви называются что-то вроде «нового-gui-эксперимента». Почему вы называете ветку, используя такие общие термины? – jayunit100

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