¿Cómo “deshacer” un clon de una sola rama?

4 minutos de lectura

¿Como deshacer un clon de una sola rama
danieltalsky

Cloné un repositorio usando el

git clone -b <branch name> --single-branch <github url> <target directory>

Esto clonó SOLO esta rama, pero ahora quiero cambiar a la maestra y otras ramas. ¿Hay alguna forma, además de borrarlo y comenzar de nuevo a clonar el resto del repositorio, de que pueda deshacer la preferencia –single-branch?

¿Como deshacer un clon de una sola rama
sarahodne

Puedes decirle a Git que extraiga todas las ramas de esta manera:

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin

si miras adentro .git/configse verá algo como esto:

[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/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true

Comparé esto con un clon completo y vi que la única diferencia era “buscar” en [remote "origin"].

Nota: estoy ejecutando Git versión 1.8.2. Las opciones de configuración pueden haber cambiado si está ejecutando una versión anterior de Git. Si mis comandos no funcionan, entonces recomendaría revisar .git/config a ver si ves algo parecido.

  • Solo quería ofrecerle un agradecimiento especial porque leí mucho y busqué en Google y no pude encontrar nada como esto.

    – danieltalsky

    18 de julio de 2013 a las 13:26

  • Encantado de ayudar. los git La herramienta de línea de comandos es increíblemente poderosa (de hecho, la mayoría de los comandos se implementan en términos de otros comandos), por lo que puede hacer muchas cosas con ella una vez que comprenda cómo se presenta el repositorio (básicamente cómo se .git carpeta funciona).

    – sarahhodne

    18 de julio de 2013 a las 17:48

  • Esto no funcionó para mí, después de ejecutar estos comandos git show-ref tags todavía falla.

    – felix fbecker

    22 oct 2017 a las 22:06

  • Tenga en cuenta que esta solución también funcionará si una rama se clonó superficialmente utilizando la siguiente sintaxis, que experimenta la misma deficiencia descrita por OP: git clone --depth=1 --branch branchname git@github.com:foobar/repo.git destinationpath

    – danemacmillan

    11 de enero de 2018 a las 17:35


  • ¡Guau, esto está lejos de ser intuitivo! Es extraño que Git no tenga fácilmente un comando para lograr esto. Sí, lo hice funcionar … ¡y ahora sé sobre el archivo de configuración en el directorio .git también!

    – kashiraja

    12 de mayo de 2018 a las 0:11


Si desea agregar una sola sucursal, puede hacer lo siguiente:

git remote set-branches --add origin [remote-branch]
git fetch origin [remote-branch]:[local-branch]

Funciona con git versión 1.9.1

  • Esto agrega múltiples fetch = líneas a .git/config, muy útil cuando desea cambiar entre dos sucursales en el control remoto pero no obtener un montón de otras sucursales. ¡Gracias!

    – terry marrón

    16/04/2018 a las 20:31

Para agregar otra sucursal remota a mi repositorio local que fue clonado usando --single-branchlo siguiente funciona para mí:

git remote set-branches --add origin [remote-branch]
git fetch
git checkout [remote-branch]

También puede utilizar comodines para [remote-branch]p.ej

git remote set-branches --add origin release-1.*
git fetch
git checkout release-1.5

Esto funciona usando git versión 2.21.1. Otras respuestas sugiriendo hacer git fetch origin [remote-branch]:[local-branch] no funcionó ya que crea la rama local en un estado sin seguimiento. al correr git pull primero intentó fusionar todas las confirmaciones de la rama remota a mi local una vez más.

  • Segunda vez que vuelvo a esta respuesta. muy útil. ¡Gracias!

    – Dios mío

    5 de mayo de 2020 a las 7:18

  • La respuesta más útil.

    – Denis Itskovich

    13 de julio de 2020 a las 12:25

  • He estado aquí varias veces xd

    – Néstor

    4 ene a las 13:59

Para mí funcionó:

git remote remove origin
git remote add origin https://*<yourPath>*.git
git fetch

¿Simplemente agregue el repositorio original como un nuevo control remoto y trabaje desde allí?

git remote add path/to/myrepo myNewOrigin
git fetch myNewOrigin

Incluso puede eliminar su control remoto de ‘origen’ actual y cambiar el nombre de ‘myNewOrigin’ a ‘origin’ si lo desea.

Desde allí puede extraer/fusionar/reorganizar.

1646965087 96 ¿Como deshacer un clon de una sola rama
trueboroda

solo cambia .git/config archivo de su repositorio local, línea fetch de [remote origin] section.

Antes de algo así

[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master

despues sera asi

[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

1646965087 999 ¿Como deshacer un clon de una sola rama
humano

Inicialmente apliqué la respuesta de Dominik Pawlak y funcionó. Pero no pude realizar más cambios después de enviar más código a mi nueva rama.

Hay otra forma de resetear single-branch por completo, que no se ha mencionado aquí:

git remote remove origin
git remote add origin git@gitlab.com:{yourProject}/{yourRepo}.git
git branch --set-upstream-to=origin/{yourBranch}  {yourBranch}
git pull

Esto restablece todo al original.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad