remote - ver ramas git




Git buscar rama remota (17)

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'

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>

Los pasos son los siguientes;

  1. git fetch origin o git fetch --all , esto llevará todas las ramas remotas a su local y luego esta es la segunda opción con la que puede proceder.

  2. 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


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


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.


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:

  • myteam.unfuddle.com = el servidor git remoto
  • tlc = Desbloquear la cuenta del proyecto donde existe el repositorio
  • daves_branch = nombre de rama remota

    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,

    1. 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 randomBranch

    2. Ejecute git fetch randomRemote . Esto traerá la rama remota.

    3. Ahora puedes ejecutar git checkout randomBranch


    simplemente intenta

    $ git pull origin your_branch_name


    git branch <name> --track origin/<name>


    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>
    

    checkout

    Para tu amigo

    $ git checkout discover
    Branch discover set up to track remote branch discover
    Switched to a new branch 'discover'
    

    git fetch
    
    git branch -r
    
    git checkout <branch_name>
    




    git-fetch