Как мне "отменить" клон с одной веткой?
Я клонировал репо, используя
git clone -b <branch name> --single-branch <github url> <target directory>
Это клонировали ТОЛЬКО эту ветку, но теперь я хочу переключиться на основную и другие ветки. Есть ли какой-нибудь способ, кроме как очистить его и начать клонировать оставшуюся часть репо, который я могу отменить в предпочтении --single-branch?
3 ответа
Вы можете сказать Git потянуть все ветви следующим образом:
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
Если вы посмотрите в .git/config
, это будет выглядеть примерно так:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[remote "origin"]
url = https://github.com/owner/repo.git
fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
Я сравнил это с полным клоном и увидел, что единственным отличием является "выборка" под [remote "origin"]
,
Примечание: я использую Git версии 1.8.2. Параметры конфигурации могли измениться, если вы используете старую версию Git. Если мои команды не работают, то я бы порекомендовал просмотреть .git/config
чтобы увидеть, если вы можете увидеть что-то подобное.
Если вы хотите добавить одну ветку, вы можете сделать следующее:
git remote set-branches --add origin [remote-branch]
git fetch origin [remote-branch]:[local-branch]
Работает с Git версии 1.9.1
Чтобы добавить еще одну удаленную ветку в мой локальный репозиторий, которая была клонирована с помощью--single-branch
, у меня работает следующее:
git remote set-branches --add origin [remote-branch]
git fetch
git checkout [remote-branch]
Вы также можете использовать подстановочные знаки для [remote-branch]
, например
git remote set-branches --add origin release-1.*
git fetch
git checkout release-1.5
Это работает с использованием git версии 2.21.1. Другие ответы, предлагающие сделатьgit fetch origin [remote-branch]:[local-branch]
не работает, поскольку создает локальную ветвь в неотслеживаемом состоянии. При бегеgit pull
Сначала он снова попытался объединить все коммиты удаленной ветки с моей локальной.
У меня работали:
git remote remove origin
git remote add origin https://*<yourPath>*.git
git fetch
Просто добавить оригинальный репо в качестве нового пульта и отработать там?
git remote add path/to/myrepo myNewOrigin
git fetch myNewOrigin
Вы даже можете удалить свой текущий удаленный "origin" и переименовать "myNewOrigin" в "origin", если хотите.
Оттуда вы можете вытащить / объединить / перебазировать.
Сначала я применил ответ Доминика Павляка, и он сработал. Но я не смог внести никаких дальнейших изменений после того, как добавил больше кода в свою новую ветку.
Есть еще один способ сброса single-branch
полностью, о чем здесь не упоминалось:
git remote remove origin
git remote add origin git@gitlab.com:{yourProject}/{yourRepo}.git
git branch --set-upstream-to=origin/{yourBranch} {yourBranch}
git pull
Это сбрасывает все в исходное состояние.
Просто измени .git/config
файл вашего локального репо, строка fetch
из [remote origin] section
.
Перед чем-то вроде этого
[remote "origin"]
url = https://github.com/owner/repo.git
fetch = +refs/heads/master:refs/remotes/origin/master
После будет так
[remote "origin"]
url = https://github.com/owner/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*