Tengo una master
y una development
rama, ambas empujadas a GitHub . Tengo clone
d, pull
ed y fetch
ed, pero sigo siendo incapaz de recuperar otra cosa que la master
rama.
Estoy seguro de que me falta algo obvio, pero he leído el manual y no me alegro en absoluto.
git
github
git-branch
git-clone
remote-branch
Peter Coulton
fuente
fuente
git branch -a
) le muestra las ramas en el control remoto, pero si intenta verificar cualquiera de ellas, estará en un estado de 'CABEZA separada'. La siguiente respuesta hacia abajo (la segunda mayoría de los votos a favor) responde a una pregunta diferente (a saber: cómo extraer todas las ramas y, de nuevo, esto solo funciona para aquellos que está rastreando localmente). Varios de los comentarios señalan que podría analizar losgit branch -a
resultados con un script de shell que rastrearía localmente todas las ramas remotas. Resumen: no hay una forma nativa de git de hacer lo que quieres y, de todos modos, podría no ser una idea tan genial.scp [email protected]:/home/some_user/project_folder ~
No estoy seguro si esa solución funciona para github aunque ..Respuestas:
Primero, clone un repositorio Git remoto y cd en él:
Luego, mire las sucursales locales en su repositorio:
¡Pero hay otras ramas escondidas en su repositorio! Puedes ver esto usando la
-a
bandera:Si solo quieres echar un vistazo rápido a una rama aguas arriba, puedes echarle un vistazo directamente:
Pero si desea trabajar en esa rama, deberá crear una rama de seguimiento local que se realiza automáticamente mediante:
y tu verás
Esa última línea arroja a algunas personas: "Nueva rama" - ¿eh? Lo que realmente significa es que la rama se toma del índice y se crea localmente para usted. La línea anterior es en realidad más informativa, ya que le indica que la rama se está configurando para rastrear la rama remota, lo que generalmente significa la rama origin / branch_name
Ahora, si observa sus sucursales locales, esto es lo que verá:
En realidad, puede rastrear más de un repositorio remoto utilizando
git remote
.En este punto, las cosas se están
gitk
volviendo bastante locas, así que corre para ver qué está pasando:fuente
Si tiene muchas ramas remotas que desea buscar a la vez, haga lo siguiente:
Ahora puede pagar cualquier rama que necesite, sin presionar el repositorio remoto.
fuente
git pull --all
hará lo mismo: simplemente no obtendrá dos veces. Y infosec812 tiene razón en que esto no responde la pregunta de todos modos. Me pregunto cómo esto obtuvo tantos votos positivos.git remote update
, luego lo intentégit branch
, solo veo sucursales locales. Pero si lo hagogit branch -a
, ahora puedo ver las ramas remotas y puedo hacer unagit pull <branchname>
para obtener la rama que quiero. - Llegué a esta pregunta de una búsqueda en Google, y esta respuesta resuelve mi problema.Este script de Bash me ayudó:
Creará ramas de seguimiento para todas las ramas remotas, excepto la maestra (que probablemente obtuvo del comando de clonación original). Creo que aún podrías necesitar hacer un
para estar seguro.
fuente
git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
como de costumbre: prueba en tu configuración antes de copiarrm -rf universe as we know it
remotes/origin/
para preservar los espacios de nombres:for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); do git branch --track "${BRANCH#remotes/origin/}" "${BRANCH}"; done
El uso de la
--mirror
opción parece copiar lasremote
ramas de seguimiento correctamente. Sin embargo, configura el repositorio como un repositorio simple, por lo que debe volver a convertirlo en un repositorio normal después.Referencia: Preguntas frecuentes de Git: ¿Cómo clono un repositorio con todas las ramas con seguimiento remoto?
fuente
git checkout
como último comando para finalmente finalizar el encabezado de la rama actual en el repositorio clonado. Esta es una gran respuesta, con mucho, la mejor. Sé valiente, eventualmente te llevaremos a la cima :-)git remote update
lo harán nuevamente. El comportamiento del cambio de tirones. He vuelto a creer que la copia completa requiere un script de una línea.git clone --mirror
es muy bueno para hacer una copia de seguridad de sus repositorios git ^ _ ^Puede cambiar fácilmente a una rama sin utilizar la elegante sintaxis "git checkout -b somebranch origin / somebranch". Solo puedes hacer:
Git hará automáticamente lo correcto:
Git verificará si existe una rama con el mismo nombre en exactamente un control remoto, y si lo hace, lo rastreará de la misma manera que si hubiera especificado explícitamente que es una rama remota. Desde la página de manual de git-checkout de Git 1.8.2.1:
fuente
checkout
es idéntico al nombre de la rama remota, todo después de "/", entonces git creará una rama del mismo nombre, todo después de "/", "rastreando" ese control remoto ? Y mediante el seguimiento, nos referimos a:git push
,git pull
, etc. voluntad en la que la distancia? Si esto es correcto, amplíe su respuesta con más información, porque estoy de acuerdo con @Daniel, esta respuesta merece más rep.git checkout --track origin/somebranch
explícitamente.Respecto a,
utilizando
o el más detallado pero más fácil de recordar
podría ser mejor, en términos de seguimiento de un repositorio remoto.
fuente
La búsqueda que está haciendo debe obtener todas las ramas remotas, pero no creará ramas locales para ellas. Si usa gitk, debería ver las ramas remotas descritas como "remotes / origin / dev" o algo similar.
Para crear una sucursal local basada en una sucursal remota, haga algo como:
Que debería devolver algo como:
Ahora, cuando esté en la rama de desarrollo, "git pull" actualizará su desarrollo local al mismo punto que la rama de desarrollo remota. Tenga en cuenta que buscará todas las ramas, pero solo arrastrará la que está hacia la parte superior del árbol.
fuente
git checkout -b newlocaldev --track origin/dev
. Si desea que la rama local tenga el mismo nombre que la remota, y la remota no tiene un nombre complicado, puede omitir el-b newlocaldev
. Con labranch.autosetupmerge
configuración predeterminada , y suponiendo que no tenga una rama local llamadadev
, estos dos comandos pueden hacer lo mismo:git checkout -b dev origin/dev
y simplementegit checkout dev
. Finalmente,git checkout origin/dev
no crea una nueva rama, sino que lo pone en estado HEAD separado.git branch -a
continúa enumerándolo como una rama remota.Cuando haces "git clone git: // location", se obtienen todas las ramas y etiquetas.
Para trabajar encima de una rama remota específica, suponiendo que sea el origen remoto:
fuente
$ git branch -a
aprender, qué ramas remotas ya están disponibles.git checkout -b master origin/master
ygit checkout --track origin/master
por favor?Usa alias. Aunque no hay ninguna línea nativa de Git, puedes definir la tuya
y luego úsalo como
fuente
¿Por qué solo ves "maestro"
git clone
descarga todas las ramas remotas pero aún las considera "remotas", aunque los archivos se encuentren en su nuevo repositorio. Hay una excepción a esto, que es que el proceso de clonación crea una rama local llamada "maestro" a partir de la rama remota llamada "maestro". De forma predeterminada,git branch
solo muestra sucursales locales, por lo que solo se ve "maestro".git branch -a
muestra todas las ramas, incluidas las ramas remotas .Cómo obtener sucursales locales
Si realmente quiere trabajar en una rama, probablemente querrá una versión "local" de la misma. Para crear simplemente sucursales locales desde sucursales remotas (sin desprotegerlas y, por lo tanto, cambiar el contenido de su directorio de trabajo) , puede hacerlo así:
En este ejemplo,
branchone
es el nombre de una sucursal local en la que está creandoorigin/branchone
; si en su lugar desea crear sucursales locales con diferentes nombres, puede hacer esto:Una vez que haya creado una sucursal local, puede verla con
git branch
(recuerde, no necesita-a
ver sucursales locales).fuente
origin/branchone
existe, también puede usarlogit checkout branchone
para crear una sucursal local con el mismo nombre y configurarla para rastrear remotamente.Esto no es demasiado complicado, los pasos muy simples y directos son los siguientes;
git fetch origin
Esto traerá todas las sucursales remotas a su local.git branch -a
Esto le mostrará todas las ramas remotas.git checkout --track origin/<branch you want to checkout>
Verifique si está en la rama deseada con el siguiente comando;
La salida tendrá gusto de esto;
Observe el signo * que denota la rama actual.
fuente
Mejor tarde que nunca, pero esta es la mejor manera de hacer esto:
En este punto, tiene una copia completa del repositorio remoto con todas sus ramas (verifique con
git branch
). Puede usar en--mirror
lugar de--bare
si su repositorio remoto tiene sus propios controles remotos.fuente
--bare
" mencionado en la última oración no existe en la lista de comandos dada.error: key does not contain a section: unset
. La respuesta de Dave funciona mejor.git config --unset core.bare
realidad es ... Para mí, esta parece la solución más limpia de todas las presentadas en las respuestas aquí. Una pena que tenga tan pocos votos positivos ...git config --bool core.bare false
. Por eso recomiendo la respuesta de Dave . ¿Qué opinas sobre la respuesta de Dave ? SaludosSolo haz esto:
Verá, 'git clone git: //example.com/myprojectt' recupera todo, incluso las ramas, solo tiene que pagarlas, luego se creará su rama local.
fuente
Solo necesita usar "git clone" para obtener todas las ramas.
Aunque solo vea la rama maestra, puede usar "git branch -a" para ver todas las ramas.
Y puede cambiar a cualquier rama que ya tenga.
No se preocupe que después de "git clone", no necesita conectarse con el repositorio remoto, "git branch -a" y "git checkout" se pueden ejecutar con éxito cuando cierra su wifi. Por lo tanto, se demuestra que cuando hace "git clone", ya ha copiado todas las ramas del repositorio remoto. Después de eso, no necesita el repositorio remoto, su local ya tiene los códigos de todas las sucursales.
fuente
Se
git clone
supone que A copia todo el repositorio. Intenta clonarlo y luego corregit branch -a
. Debería enumerar todas las ramas. Si quiere cambiar a la rama "foo" en lugar de "master", usegit checkout foo
.fuente
git clone
descarga todas las ramas remotas, pero solo crea una rama local de master. Comogit branch
solo muestra sucursales locales, también necesitagit branch -a
ver sucursales remotas.Use mi herramienta git_remote_branch (necesita que Ruby esté instalado en su máquina). Está construido específicamente para hacer que las manipulaciones de sucursales remotas sean muy fáciles.
Cada vez que realiza una operación en su nombre, lo imprime en rojo en la consola. Con el tiempo, finalmente se pegan en tu cerebro :-)
Si no desea que grb ejecute comandos en su nombre, simplemente use la función 'explicar'. Los comandos se imprimirán en su consola en lugar de ejecutarse por usted.
Finalmente, todos los comandos tienen alias para facilitar la memorización.
Tenga en cuenta que este es un software alfa ;-)
Aquí está la ayuda cuando ejecuta grb help:
fuente
Todas las respuestas que vi aquí son válidas, pero hay una forma mucho más limpia de clonar un repositorio y extraer todas las ramas a la vez.
Cuando clonas un repositorio, toda la información de las ramas se descarga, pero las ramas están ocultas. Con el comando
puedes mostrar todas las ramas del repositorio y con el comando
luego puede "descargarlos" manualmente uno a la vez.
Sin embargo, cuando desea clonar un repositorio con muchas ramas, todas las formas ilustradas arriba son largas y tediosas con respecto a una forma mucho más limpia y rápida que voy a mostrar, aunque es un poco complicado. Necesita tres pasos para lograr esto:
cree una nueva carpeta vacía en su máquina y clone una copia espejo de la carpeta .git desde el repositorio:
el repositorio local dentro de la carpeta my_repo_folder todavía está vacío, solo hay una carpeta oculta .git ahora que puede ver con un comando "ls -alt" desde el terminal.
cambie este repositorio de un repositorio vacío (desnudo) a un repositorio regular cambiando el valor booleano "desnudo" de las configuraciones de git a falso:
Tome todo lo que está dentro de la carpeta actual y cree todas las ramas en la máquina local, por lo tanto, este es un repositorio normal.
Así que ahora puede escribir el comando "git branch" y ver que todas las ramas se descargan.
Esta es la forma rápida en que puede clonar un repositorio git con todas las ramas a la vez, pero no es algo que quiera hacer para cada proyecto de esta manera.
fuente
La clonación desde un repositorio local no funcionará con git clone & git fetch: muchas ramas / etiquetas permanecerán intactas.
Para obtener un clon con todas las ramas y etiquetas.
Para obtener un clon con todas las ramas y etiquetas, pero también con una copia de trabajo:
fuente
OK, cuando clonas tu repositorio, tienes todas las ramas allí ...
Si solo lo haces
git branch
, están algo escondidos ...Entonces, si desea ver el nombre de todas las ramas, simplemente agregue una
--all
bandera como esta:git branch --all
ogit branch -a
Si solo realiza el pago en la sucursal, obtendrá todo lo que necesita.
Pero, ¿qué tal si la rama creada por otra persona después de que clones?
En este caso, solo haz:
git fetch
y verifique todas las ramas nuevamente ...
Si desea obtener y pagar al mismo tiempo, puede hacer lo siguiente:
git fetch && git checkout your_branch_name
También creé la imagen a continuación para que puedas simplificar lo que dije:
fuente
Al mirar una de las respuestas a la pregunta, noté que es posible acortarla:
Pero cuidado, si una de las ramas remotas se nombra como, por ejemplo, admin_master, ¡no se descargará!
Gracias a bigfish por la idea original.
fuente
grep
, para mejorar el filtro y evitar falsos positivos.Este código extraerá todos los códigos de sucursales remotas al repositorio local.
fuente
Para copiar y pegar en la línea de comando:
Para más legibilidad:
Esta voluntad:
Basado en la respuesta de VonC .
fuente
Escribí estas pequeñas funciones de Powershell para poder verificar todas mis ramas git, que están en origen remoto.
Se pueden encontrar más funciones de git en mi repositorio de configuración de git
fuente
Aquí hay una respuesta que usa awk. Este método debería ser suficiente si se usa en un nuevo repositorio.
Las ramas existentes simplemente se retirarán o se declararán como ya en él, pero se pueden agregar filtros para evitar conflictos.
También se puede modificar para que llame a un
git checkout -b <branch> -t <remote>/<branch>
comando explícito .Esta respuesta se desprende Nikos C 's idea .
Alternativamente, podemos especificar la rama remota en su lugar. Esto se basa en la respuesta de murphytalk .
Lanza mensajes de error fatales sobre conflictos pero los veo inofensivos.
Ambos comandos pueden tener un alias.
Usando la respuesta de nadie como referencia, podemos tener los siguientes comandos para crear los alias:
Personalmente usaría
track-all
otrack-all-branches
.fuente
Necesitaba hacer exactamente lo mismo. Aquí está mi script Ruby .
fuente
Ninguna de estas respuestas lo cortó, excepto que el usuario nadie está en el camino correcto.
Estaba teniendo problemas para mover un repositorio de un servidor / sistema a otro. Cuando cloné el repositorio, solo creó una rama local para el maestro, por lo que cuando presioné el nuevo control remoto, solo se presionó la rama maestra.
Entonces encontré estos dos métodos MUY útiles. Espero que ayuden a alguien más.
Método 1:
Método 2:
fuente
git clone --mirror
en el repositorio original funciona bien para esto.fuente
Git generalmente (cuando no se especifica) obtiene todas las ramas y / o etiquetas (referencias, ver:)
git ls-refs
de uno o más repositorios junto con los objetos necesarios para completar sus historias. En otras palabras, recupera los objetos a los que pueden acceder los objetos que ya están descargados. Ver: ¿Qué hacegit fetch
realmente?A veces puede tener ramas / etiquetas que no están conectadas directamente con la actual, por lo que
git pull --all
/git fetch --all
no ayudará en ese caso, pero puede enumerarlas por:y buscarlos manualmente al conocer los nombres de referencia.
Entonces, para buscarlos a todos , intente:
El
--depth=10000
parámetro puede ayudar si ha reducido el repositorio.Luego revise todas sus ramas nuevamente:
Si lo anterior no ayuda, debe agregar las ramas que faltan manualmente a la lista de seguimiento (ya que de alguna manera se perdieron):
por me
git remote set-branches
gusta:por lo que puede aparecer debajo
remotes/origin
después de buscar:Solución de problemas
Si aún no puede obtener otra cosa que no sea la rama maestra, verifique lo siguiente:
git remote -v
), p. Ej.git config branch.master.remote
esorigin
.origin
apunta a la URL correcta a través de:git remote show origin
(vea esta publicación ).fuente
A principios de 2017, la respuesta en este comentario funciona:
git fetch <origin-name> <branch-name>
derriba la rama para ti. Si bien esto no tira todas las ramas a la vez, puede ejecutar singularmente esta por rama.fuente
Aquí hay otro comando breve de una línea que crea ramas locales para todas las ramas remotas:
Funciona también correctamente si ya se han creado ramas locales de seguimiento. Puede llamarlo después del primero
git clone
o en cualquier momento posterior.Si no necesita que le
master
saquen una rama después de la clonación, usefuente