Как мне "отменить" клон с одной веткой?

Я клонировал репо, используя

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/*
Другие вопросы по тегам