git как создать локальную главную ветку и синхронизировать с удаленным мастером

#git #macos #github #version-control

#git #macos #github #контроль версий

Вопрос:

Мне сказали следующее: «Никогда не меняйте главную ветку на разветвлении репозитория или любой ветке, которая поступила из восходящего потока. Ваша главная ветка будет отличаться от восходящей, и вы не сможете подключить восходящую ветку к локальной ветке. «. Для меня это имеет смысл.

Я сделал все свои коммиты в своей локальной главной ветке. Итак, следуя приведенному выше совету, я хочу, чтобы мой мастер был чистым сейчас. Итак, я проверил master на old_master

ветка git

 *master
  

git checkout -b patchv1

Теперь все мои изменения находятся в ветке patchv1.

Я принудительно удалил главную ветку, выполнив команду ниже

git branch -D master

Я думал, что создам сиротский мастер, а затем git pull

git checkout —сиротский мастер

 Switched to a new branch 'master'
  

git pull

 There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> master
  

git извлекает удаленный источник

 fatal: 'remote' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
  

git удаленно показывает источник

 * remote origin
  Fetch URL: https://giturl/my_org_name/runbooks.git
  Push  URL: https://giturl/my_org_name/runbooks.git
  HEAD branch: master
  Remote branches:
    custom-patch-1            tracked
  

Кроме того, когда я делаю ветку git, она не показывает эту недавно созданную бесхозную главную ветку. В нем просто указана моя ветка patchv1, которую я извлек из master перед ее удалением. И это тоже, похоже, не моя текущая ветка.

ветка git

 patchv1
  

Как воссоздать главную ветку и убедиться, что она синхронизирована с удаленным мастером?

Ответ №1:

Я думаю, вы пошли не тем путем. Сиротская ветвь — это новая ветвь, которая не имеет никакого отношения к исходной главной ветви (будь то удаленная или локальная). Поэтому я предполагаю, что это не так, как вы хотите. Моим лучшим советом было бы: go back to your branch patchv1 . Тогда самый простой способ синхронизации с удаленным мастером (после того, как вы проверили patchv1 ) — просто запустить:

 git pull -r origin master
  

Это приведет к получению состояния мастера удаленной ветки, затем оно перебазирует вашу ветку patchv1 поверх новой позиции ветки удаленного главного …. и это, конечно, если вы хотите перебазироваться. Если вы хотите вместо этого запустить слияния, выполните то же самое, но без этой -r опции.

Теперь ваша локальная главная ветка. Если вы вообще не собираетесь ее использовать, тогда ее удаление подойдет. Как и вы, я бы предпочел, чтобы мои локальные ветки устанавливали свою восходящую ветку для удаленных ветвей, чем заставлять сначала синхронизировать локальный мастер, а затем вносить изменения в ветки функций…. но я думаю, это дело вкуса.

Ответ №2:

Вам не нужно создавать orphan of master , просто git checkout master and then git pull .

Типичный рабочий процесс должен выполняться git pull на вашем локальном master компьютере, чтобы он извлекал последние данные из remote master ветки. Затем вы создаете функциональную ветвь от этого: git checkout -b my-feature , выполняете свою работу, а затем git push -u origin my-feature , чтобы вы могли открыть запрос на извлечение, чтобы объединить функциональную ветвь с master.

Чтобы поддерживать вашу функциональную ветку в актуальном состоянии с помощью master, вы всегда можете сделать git merge origin/master (или git pull -r origin master , который помещает ваши коммиты поверх новых коммитов master ). ).