remote - listar ramas remotas git
Git buscar rama remota (25)
Mi colega y yo estamos trabajando en el mismo repositorio, lo hemos dividido en dos ramas, cada una técnicamente para diferentes proyectos, pero tienen similitudes, por lo que a veces queremos comprometernos con el * master de la rama.
Sin embargo, tengo la rama. Mi pregunta es, ¿cómo puede mi colega sacar esa rama específicamente? Un git clone
de git clone
del repo no parece crear las ramas localmente para él, aunque puedo verlas en vivo en el desabastecimiento después de un empujón en mi extremo.
Además, cuando originalmente hice la rama hice -b checkout
. No estoy seguro si eso hace mucha diferencia?
iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master
git fetch origin discover
git checkout discover
Estos son los comandos que ejecuté. Pero definitivamente no está funcionando. Quiero poder revisar esa sucursal y luego rechazar y devolver solo los cambios de sucursales de varios colaboradores o estaciones de trabajo.
A veces se le pide que no juegue con la rama maestra y que trabaje solo con la rama remota (como se me pidió). Así que todo lo que necesitas es la rama remota.
Así que para clonar la rama remota solo (sin el maestro), haga esto
git clone url --branch remote_branch_name
donde remote_branch_name es el nombre de la rama remota
Por ejemplo,
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15
Esto asegurará que clone la rama remota a su rama local con el nombre de la rama remota.
Ahora, si confirma su código y presiona, el código se enviará solo a esa sucursal.
Con este sencillo comando:
git checkout -b ''your_branch'' origin/''remote branch''
Digamos que su control remoto es [email protected] y desea su rama random_branch. El proceso debe ser como sigue:
Primero revise la lista de sus controles remotos por
git remote -v
Si no tiene el control remoto [email protected] en la salida del comando anterior, lo agregaría
git remote add xyz [email protected]
- Ahora puedes obtener el contenido de ese control remoto
git fetch xyz
- Ahora compruebe la rama de ese control remoto por
git checkout -b my_copy_random_branch xyz/random_branch
- Compruebe la lista de sucursales por
git branch -a
La rama local my_copy_random_branch estaría rastreando la rama random_branch de tu control remoto.
He utilizado fetch
seguido de checkout
...
git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>
... donde <rbranch>
es la rama remota o la referencia de origen y <lbranch>
es la rama local o la referencia de destino que aún no existe y que probablemente desee nombrar como la rama remota o la fuente de referencia . Esto se explica en las options en la explicación de <refspec>
.
Git es tan inteligente que completa automáticamente el primer comando si presiona después de las primeras letras de la rama remota. IE: Ni siquiera tengo que nombrar la sucursal local, Git copia automáticamente el nombre de la sucursal remota para mí. Gracias Git!
Además, como muestra la respuesta en esta publicación de SO similar , si no nombra la rama local que está disponible, aún puede crearla cuando la -b
utilizando el indicador -b
. IE: git fetch <remote> <branch>
seguido de git checkout -b <branch> <remote>/<branch>
hace exactamente lo mismo que mi respuesta inicial. Y, evidentemente, si su repositorio solo tiene un control remoto, puede hacer git checkout <branch>
después de la fetch
y creará una sucursal local para usted. EG: Acabas de clonar un repositorio y quieres ver ramas adicionales desde el control remoto.
Creo que parte de la documentación para la fetch
puede haberse copiado literalmente de la pull
. En particular, la sección sobre <refspec>
en options es la misma. Sin embargo, no creo que el fetch
se merge
nunca, por lo que si deja el lado de destino del colon vacío no debería hacer nada .
NOTA: git fetch <remote> <refspec>
es la abreviatura de git fetch <remote> <refspec>:
que por lo tanto no haría nada, pero git fetch <remote> <tag>
es lo mismo que git fetch <remote> <tag>:<tag>
que debería copiar el <tag>
remoto localmente.
Supongo que esto solo es útil si desea copiar una sucursal remota localmente, pero no necesariamente compruebe de inmediato. De lo contrario, ahora usaría la respuesta aceptada anterior , que se explica detalladamente en la primera sección de la descripción de la --track
y más adelante en la sección de options en la explicación de --track
, ya que es un 1-liner. Bueno ... una especie de 1-liner, porque aún tendrías que ejecutar git fetch <remote>
primero.
FYI: El orden de los <refspecs>
(origen: destino) explica el extraño método pre Git-1.7 para eliminar sucursales remotas . IE: No introduzca nada en el refspec de destino.
La forma más fácil de hacerlo, al menos para mí:
git fetch origin <branchName>
Lo que me ayudó fue
1) Para ver todas las sucursales remotas disponibles (por ejemplo, ''nombre de sucursal remota'')
git branch -r
2) Crear una rama local usando el nombre de la rama remota
git fetch && git checkout ''remote-branch-name''
Los pasos son los siguientes;
git fetch origin
ogit fetch --all
, esto llevará todas las ramas remotas a su local y luego esta es la segunda opción con la que puede proceder.git checkout --track origin/<The_remote_branch you want to switch over>
Luego trabaje en esta rama y puede verificar si está en esa rama o no escribiendo
git branch
Muestra la rama en la que se encuentra actualmente.
Necesitas crear una rama local que rastree una rama remota. El siguiente comando creará una rama local llamada daves_branch , rastreando el origen de la rama remota / daves_branch . Cuando presione sus cambios, se actualizará la rama remota.
Para la mayoría de las versiones de git:
git checkout --track origin/daves_branch
--track
es la abreviatura de git checkout -b [branch] [remotename]/[branch]
donde [remotename] es origen en este caso y [rama] es dos veces lo mismo, daves_branch en este caso.
Para git 1.5.6.5 necesitabas esto:
git checkout --track -b daves_branch origin/daves_branch
Para git 1.7.2.3 y superior, esto es suficiente (podría haber comenzado antes, pero esta es la confirmación más temprana que pude encontrar rápidamente):
git checkout daves_branch
Tenga en cuenta que con las versiones recientes de git, este comando no creará una rama local y lo pondrá en un estado ''HEAD desconectado''. Si quieres una sucursal local, usa la opción --track
. Los detalles completos aquí: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches
Para verificar myBranch que existe de forma remota y no localmente, esto funcionó para mí:
git fetch --all
git checkout myBranch
Recibí este mensaje:
Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch ''myBranch''
Si está intentando "desproteger" una nueva sucursal remota (que existe solo en el remoto, pero no localmente), esto es lo que necesitará:
git fetch origin
git checkout --track origin/<remote_branch_name>
Esto supone que desea obtener desde el origen . Si no, reemplace el origen por su nombre remoto .
Si tiene un repositorio que fue clonado con --depth 1, muchos de los comandos listados no funcionarán. Por ejemplo ver aqui
% git clone --depth 1 https://github.com/repo/code
Cloning into ''code''...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec ''other_branch'' did not match any file(s) known to git.
% git fetch origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
* branch other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec ''other_branch'' did not match any file(s) known to git.
%
En este caso, volvería a hacer el repositorio, pero quizás haya otras técnicas, por ejemplo, git Clone superficial (clon - profundidad) pierde ramas remotas
Si ya conoces tu rama remota como tal ...
git remote
=> One
=> Two
y conoce el nombre de la sucursal que desea pagar por ej. br1.2.3.4 entonces haz
git fetch One
=> returns all meta data of remote i.e. the branch name in question.
Todo lo que queda es sacar la sucursal
git checkout br.1.2.3.4
Entonces haz cualquier rama nueva fuera de ella.
También puede obtener y retirar la rama remota de una sola vez: -
git fetch && git checkout the-branch-name
Un comando simple: "git checkout remote_branch_name" le ayudará a crear una sucursal local que tenga todos los cambios en la sucursal remota.
Use git branch -a
( git branch -a
locales y remotas) o git branch -r
(solo sucursales remotas) para ver todos los remotos y sus sucursales. Luego puede hacer un git checkout -t remotes/repo/branch
al remoto y crear una sucursal local.
También hay un comando git ls-remote para ver todos los refs y etiquetas para ese control remoto.
Utiliza ''git pull'' para mantener tus ramas separadas. Usaré los nombres reales de las sucursales y los repositorios para ayudar, ya que ''lbranch'' y ''rbranch'' son difíciles de descifrar.
Vamos a utilizar:
Usted, o cualquier colega, puede ejecutar esto para atraer solo a su sucursal, sin importar cuántas sucursales haya:
git init git pull [email protected]:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
Verifique su .git/config
, en particular, qué seguimiento está presente en la búsqueda de ese control remoto.
[remote "randomRemote"]
url = [email protected]:someUser/someRepo.git
fetch = +refs/heads/*:refs/remotes/randomRemote/*
Si tiene heads/*
apuntando a randomRemote/*
, cuando ejecuta git fetch randomRemote
, buscará todas las ramas. Entonces puedes simplemente retirar esa rama.
De otra manera,
Necesitas agregar sucursales remotas al seguimiento usando esto. Compruebe su
.git/config
después de ejecutar esto. Tu entenderás. git conjunto de ramas remotas --add randomRemote randomBranchEjecute
git fetch randomRemote
. Esto traerá la rama remota.Ahora puedes ejecutar
git checkout randomBranch
escribí
git checkout <branch_name>
y consiguió
Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch ''<branch_name>''
simplemente intenta
$ git pull origin your_branch_name
git branch <name> --track origin/<name>
git fetch && git checkout <your friend''s branch name>
debería hacer el truco
git fetch --all & git checkout <branch name>
El título y la pregunta se confunden:
- Git buscar rama remota
- ¿Cómo puede mi colega tirar esa rama específicamente?
Si la pregunta es cómo puedo conseguir que funcione una sucursal remota o cómo realizar el checkout de una sucursal remota, una solución más simple es:
Con git (> = 1.6.6) puedes usar:
git checkout <branch_name>
Si no se encuentra <branch_name>
local pero existe una rama de seguimiento en exactamente un control remoto con un nombre coincidente, trate como equivalente a:
git checkout -b <branch_name> --track <remote>/<branch_name>
Para tu amigo
$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch ''discover''
git checkout -b serverfix origin/serverfix
Esta es una operación bastante común que git proporciona la taquigrafía --track:
git checkout --track origin/serverfix
De hecho, esto es tan común que incluso hay un atajo para ese atajo. Si el nombre de la rama que está tratando de pagar (a) no existe y (b) coincide exactamente con un nombre en un solo control remoto, Git creará una rama de seguimiento para usted:
git checkout serverfix
Para configurar una sucursal local con un nombre diferente al de la sucursal remota, puede usar fácilmente la primera versión con un nombre de sucursal local diferente:
git checkout -b sf origin/serverfix
Ahora, su sucursal local sf se extraerá automáticamente del origen / serverfix.
Fuente: Pro Git 2nd Edition, escrito por Scott Chacon y Ben Straub (corte para facilitar la lectura)
git fetch
git branch -r
git checkout <branch_name>