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