Git: переход на удаленную ветку из клона - PullRequest
2 голосов
/ 30 сентября 2011

У меня вопрос по рабочему процессу git, и я не до конца понимаю все термины, чтобы узнать, что искать в Google.

Краткая версия: возможно ли "переключить" локальный каталог git на ветку из удаленного репозитория, когда ваши локальные репозитории запускаются как клоны удаленного репозитория? Я новичок в Git, так что я все еще в курсе терминологии здесь; пожалуйста, дайте мне знать, если я сказал что-то, что кажется неправильным / неправильным.

Длинная версия.

У меня есть локальный репозиторий, который является клоном "центрального" репозитория. Этот репозиторий имеет несколько веток, каждая из которых на много ревизий опережает основную ветку исходного репозитория.

$ git branch
  foo
* master
  universal_imports    

Я знаю, что могу "переключиться" на одну из своих локальных веток, используя команду checkout git

$ git checkout foo
$ git checkout universal_imports
etc.

У меня также есть несколько пультов

$ git remote
origin
upstream

Основная ветвь upsteam является нашим источником истины. Это продукт , вышеупомянутый центральный репозиторий. Как указывалось ранее, мой локальный главный репозиторий начинался как клон этого репозитория. (на самом деле мой локальный репозиторий - это клон удаленного origin, который является github-форком главной ветки вышестоящего потока. Я не уверен, что это актуально)

Вот сценарий, который я пытаюсь решить. Я делал новые разработки на своих ветках. Я на много версий впереди оригинального мастера. Однако я только что получил запрос на исправление чего-либо в производстве. Моя ментальная модель здесь была бы

  1. Переключите мой локальный код, чтобы он соответствовал производственному коду
  2. Исправить и зафиксировать
  3. Слить мой локальный код в ветку источника правды
  4. Переключите мой локальный код обратно на мои "настоящие" ветки и продолжайте разработку новых функций

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

Если не считать повторного клонирования центрального хранилища, есть ли для этого рабочий процесс git? В идеале я хотел бы что-то вроде описанного мной «переключиться на удаленную ветку», но если это бессмысленный разговор, есть ли способ, которым я мог бы работать с git, который позволил бы мне справиться с этой ситуацией. (впереди новая работа, но главное - отработать точку в истории)

1 Ответ

2 голосов
/ 30 сентября 2011

Вы можете создать новую ветвь для отслеживания удаленной ветки следующим образом (здесь локальная ветвь называется «bugfix»):

git checkout -b bugfix upstream/master

После того, как у вас есть локальная ветка отслеживания и синхронизируется с нужным удаленнымветвь, вы можете просто внести изменения, затем git commit и git push, а затем проверить исходную рабочую ветку.

Наконец, после проверки вашей рабочей ветки снова, вы захотите либо объединить исправлениеизмените свою рабочую ветку следующим образом:

git merge bugfix

Или перебазируйте ее следующим образом (перебазировка создает более чистую историю, но может потребовать больше усилий для разрешения конфликтов):

git rebase -i bugfix

Вы можетеиди туда и оставь эту ветку (в этом случае ты, вероятно, захочешь назвать это чем-то более постоянным, чем «bugfix», может быть, что-то вроде «upstream-master», или «live-product», или как угодно).Или вы можете удалить локальную ветку, если она вам больше не нужна, например:

git branch -D bugfix
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...