Pregunta ¿Cómo buscar todas las ramas de git?


He clonado un repositorio git, que contiene alrededor de 5 ramas. Sin embargo, cuando lo hago git branch Solo veo uno de ellos:

$ git branch
* master

Sé que puedo hacer git branch -a para ver todas las ramas, pero ¿cómo podría tirar todas las ramas localmente así que cuando lo haga git branch, muestra:

$ git branch
* master
* staging
* etc...

940
2018-04-25 09:05


origen


Respuestas:


He escrito mi respuesta hace un tiempo y la última votación negativa me motivó a actualizarla con mi experiencia posterior :-)

Editar: versión anterior de esta respuesta creado sucursales con el prefijo 'origen', todo apunta a dominar la rama, en lugar de ramas reales, y tener problemas con expansiones variables. Esto se ha corregido según los comentarios.

Puedes buscar una rama de todos los controles remotos como esta:

git fetch --all

fetch actualiza copias locales de sucursales remotas para que esto sea siempre seguro para sus sucursales locales PERO:

  1. fetch no lo hará actualizar sucursales locales (que pista ramas remotas); Si desea actualizar sus sucursales locales, aún necesita obtener todas las sucursales.

  2. fetch no lo hará crear sucursales locales (que pista sucursales remotas), tienes que hacer esto manualmente. Si desea enumerar todas las sucursales remotas: git branch -a

A actualizar sucursales locales que rastrean sucursales remotas:

git pull --all

Sin embargo, esto puede ser aún insuficiente. Funcionará solo para las sucursales locales que rastrean sucursales remotas. Para rastrear todas las sucursales remotas ejecute este en línea ANTES DE  git pull --all:

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done

TL; versión DR

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

(Parece que pull extrae todas las ramas de todos los controles remotos, pero siempre busco primero solo para estar seguro)

Ejecute el primer comando solo si hay sucursales remotas en el servidor que sus sucursales locales no rastrean.

PD hasta donde se git fetch --all y git remote update son equivalentes.



Kamil Szot comentario, que 74 (al menos) personas encontraron útil.

Tuve que usar:

for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done

porque su código creó ramas locales llamadas origin/branchname y   Obtenía "refname" origen / nombre de rama "es ambiguo siempre que   referido a eso.


1261
2018-04-25 09:10



Para enumerar las sucursales remotas:
git branch -r 

Puede verificarlos como sucursales locales con:
git checkout -b LocalName origin/remotebranchname


419
2018-04-25 10:00



Tendrá que crear sucursales locales para rastrear sucursales remotas.

Suponiendo que solo tiene un control remoto llamado origin, este fragmento creará sucursales locales para todos los de seguimiento remoto:

for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done

Después de esto, git fetch --all actualizará todas las copias locales de sucursales remotas.

También, git pull --all actualizará sus ramas locales de seguimiento, pero dependiendo de sus commits locales y cómo la 'fusión' configurar opción se establece que podría crear una combinación de cometer, avance rápido o el fracaso.


159
2018-01-17 15:33



Si lo haces:

git fetch origin

entonces estarán todos allí localmente. Si luego realiza:

git branch -a

los verá enumerados como controles remotos / origen / nombre-rama. Ya que están allí localmente, puedes hacer lo que quieras con ellos. Por ejemplo:

git diff origin/branch-name 

o

git merge origin/branch-name

o

git checkout -b some-branch origin/branch-name

96
2018-04-25 13:52



$ git remote update  
$ git pull --all

Esto supone que se rastrean todas las ramas

si no lo son puedes disparar esto en bash

for remote in `git branch -r `; do git branch --track $remote; done

Luego ejecuta el comando.


42
2018-04-25 09:07



qué pasa git fetch && git checkout RemoteBranchName ? funciona muy bien para mí ...


34
2018-05-08 16:14



El bash for loop no funcionaba para mí, pero esto hizo exactamente lo que yo quería. Todas las ramas de mi origen reflejan el mismo nombre localmente.

git fetch origin '+refs/heads/*:refs/heads/*'

27
2017-10-28 20:02



Cuando clonas un repositorio, toda la información de las ramas se descarga, pero las ramas están ocultas. Con el comando

$ git branch -a

puede mostrar todas las ramas del repositorio y con el comando

$ git checkout -b branchname origin/branchname

luego puede "descargarlos" manualmente de a uno por vez.


Sin embargo, hay una manera mucho más limpia y rápida, aunque es un poco complicada. Necesitas tres pasos para lograr esto:

  1. Primer paso

    crea una nueva carpeta vacía en tu máquina y clona una copia duplicada de la carpeta .git del repositorio:

    $ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
    $ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git
    

    el repositorio local dentro de la carpeta my_repo_folder todavía está vacío, ahora solo hay una carpeta oculta .git que se puede ver con un comando "ls -alt" desde la terminal.

  2. Segundo paso

    cambie este repositorio desde un repositorio vacío (vacío) a un repositorio regular al cambiar el valor booleano "desnudo" de las configuraciones de git a falso:

    $ git config --bool core.bare false
    
  3. Tercer paso

    Coge todo lo que está dentro de la carpeta actual y crea todas las ramas en la máquina local, por lo tanto, esto es un repositorio normal.

    $ git reset --hard
    

Así que ahora puedes simplemente escribir el comando git branch y puede ver que todas las ramas se descargan.

Esta es la manera rápida en que puedes clonar un repositorio de git con todas las ramas a la vez, pero no es algo que quieras hacer para cada proyecto de esta manera.


25
2017-12-06 20:12



Normalmente no uso nada más que comandos como este:

git fetch origin
git checkout --track origin/remote-branch

Una versión más corta:

git fetch origin
git checkout -t origin/remote-branch

23
2017-07-07 14:42