Ответ 1
Я искал то же самое и, наконец, нашел ответ, который работал у меня в другой статье stackoverflow: Объединить, обновить и вывести ветки Git без использования проверок
В принципе:
git fetch <remote> <srcBranch>:<destBranch>
Я использую команду git pull и другие команды из ветки, в которой я работаю. Но я создал сервер разработки, над которым работают несколько человек, поэтому я не хочу переключаться между ветвями, когда я это делаю. Если я хочу обновить существующую ветвь на dev-сервере из репозитория github, мы все используем, что было бы правильным путем? Если я запустил команду "git pull github branchname", это просто потянет ветку в текущую ветку?
Все примеры git, которые я могу найти, показывают, что вы сначала запускаете "checkout branchname", затем выполняете pull. Я пытаюсь избежать этого. Как я уже сказал, это уже существующая ветка, и я просто хочу обновить ее до последней версии.
Я искал то же самое и, наконец, нашел ответ, который работал у меня в другой статье stackoverflow: Объединить, обновить и вывести ветки Git без использования проверок
В принципе:
git fetch <remote> <srcBranch>:<destBranch>
Использование
git fetch
вместо этого. Он обновляет удаленные ссылки refs и объекты в вашем репо, но оставляет локальные ветки, HEAD и рабочую среду.
У меня был тот же самый вопрос с необходимостью принять или копить текущие изменения функций, мастер - контроль ветвь, не pull
команду действительно получают все с удаленного на локальный master
рабочей области, а затем снова переключиться на эту ветку и выполнить rebase
, чтобы сделать его к -date с мастером.
Чтобы сделать все это, сохраните рабочее пространство на ветке функций и избегайте всех переключений, я делаю это:
git fetch origin master:master
git rebase master
И это трюк красиво.
Если вы хотите, чтобы подсказки локальных ветвей были перенаправлены после git fetch
, вам понадобятся дополнительные шаги.
Более конкретно, предположим, что в реестре github есть ветки D
, B
, C
и master
(причина этого нечетного набора имени ветки будет ясна через мгновение). Вы находитесь на хосте devhost
, и вы находитесь в репо, где origin
- это реплика github. Вы выполняете git fetch
, который переносит все объекты и обновления origin/D
, origin/B
, origin/C
и origin/master
. Все идет нормально. Но теперь вы говорите, что хотите, чтобы что-то произошло на devhost
, с локальными ветвями D
, B
, C
и/или master
?
У меня есть эти очевидные (для меня в любом случае) вопросы:
B
) совершает ошибку в удаленном (github) репо? Должны ли они быть объединены, переустановлены или...?C
), а рабочий каталог и/или индекс изменены, но не зафиксированы?A
) и/или ветки удалены (D
)?Если ответ на (1) "потому что devhost
на самом деле не предназначен для разработки, а скорее является локальным зеркалом, которое просто хранит локально доступную копию репозитория github, чтобы все наши фактические разработчики могли читать из него быстро вместо того, чтобы медленно читать из github", тогда вы хотите "зеркало", а не "нормальное" репо. У него не должно быть рабочего каталога, и, возможно, он не должен принимать нажатия, и в этом случае оставшиеся вопросы просто уходят.
Если есть другой ответ, (2-4) становятся проблематичными.
В любом случае, здесь рассмотрим способ обновления локальных ссылок на основе удаленных ссылок (например, после запуска git fetch -p
):
for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
local=${ref#refs/remotes/origin/}
... code here ...
done
Что входит в раздел ... code here ...
, зависит от ответов на вопросы (2-4).
EDIT: используйте 'git pull' Он будет извлекать все ветки из репо и также обновляться до последней, если ветка выходит из локальной системы только для текущей ветки. Примечание. Притяжение git эквивалентно извлечению + слиянию, которое извлекает все ветки, но объединяет только текущую ветвь.