Git тянет нерабочую ветку без переключения

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

  1. Зафиксировать основную ветку
  2. Отправить фиксацию на удаленный
  3. Переключиться/оформить заказ на техническое обслуживание
  4. Вишневый выбор коммита с шага 1
  5. Создайте и убедитесь, что все по-прежнему работает, как задумано
  6. Отправить фиксацию обслуживания на удаленный сервер

Моя проблема заключается в том, что ветки стали значительно расходиться, и мне приходится перестраивать весь проект каждый раз, когда я переключаюсь, что занимает до 10 минут. Это ожидаемо, но я бы не хотел этого делать, так как часто переключаюсь между ветвями. Поэтому, чтобы избежать этого, я создал второй рабочий каталог, чтобы у меня был каталог для каждой ветки. Проблема в том, что я не могу выбрать исходный основной коммит в каталоге обслуживания, пока я не перетащу этот коммит в основную ветвь каталога обслуживания с удаленного компьютера. Когда я делаю это, конечно, я должен полностью восстановить.

Есть ли способ вытащить коммиты в основную ветку моего каталога обслуживания без переключения? Или есть лучший способ сделать это полностью? Недавно мы перешли на Git с CVS, так что я с ним не очень знаком.


person John Brooks    schedule 22.12.2015    source источник
comment
Возможный дубликат How to ' git pull' в ветку, которая не является текущей?   -  person Victor Sergienko    schedule 27.01.2017
comment
Поскольку у вас уже есть несколько каталогов/клонов на вашем компьютере, вы можете получать их друг от друга, а не удаленно. stackoverflow.com/questions/10603671   -  person approxiblue    schedule 28.01.2017
comment
Возможный дубликат Объединять, обновлять и извлекать ветки Git без использования проверок   -  person Victor Sergienko    schedule 30.10.2017


Ответы (2)


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

Если ваш git достаточно свежий (>= 2.5), вы можете использовать git worktree, см. это руководство для получения дополнительной информации. .

В противном случае (git ‹ 2.5) вы можете выбрать git-new- workdir из git contribs и используйте его.

person user3159253    schedule 22.12.2015
comment
Сегодня я обновил git до последней версии и попробовал рабочее дерево. Это прекрасно работает. Единственная проблема заключается в том, что TortoiseGit еще не поддерживает рабочее дерево git, но я только собираюсь научиться использовать терминал BASH. Спасибо. - person John Brooks; 24.12.2015

Вы можете загрузить новые коммиты в другой репозиторий, просто запустив fetch (в другом репозитории):

git fetch origin

Однако fetch будет обновлять только ветки удаленного отслеживания, а не локальные ветки, поэтому master не будет перемещаться, а origin/master будет. Таким образом, вы можете выбрать самую новую фиксацию с помощью:

git cherry-pick origin/master

(Насколько мне известно, нет элегантного способа создать новую фиксацию поверх другой ветки, кроме той, которая в настоящее время извлечена, поэтому я думаю, что вам нужно придерживаться двух репозиториев, если вы не хотите переключать ветки. Звучит как вам это все равно понадобится, чтобы проверить изменения, которые вы делаете в другой ветке?)

person Aasmund Eldhuset    schedule 22.12.2015