Git: Управление ветвями - PullRequest
3 голосов
/ 11 января 2012

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

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

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

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

1 Ответ

4 голосов
/ 11 января 2012

Это все довольно простые вещи:

# 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~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...
...