Cómo copiar una rama local de Git a un repositorio remoto


127

He tomado los siguientes pasos hasta ahora:

  1. Clonado un repositorio remoto de Git
  2. Ramificó la rama maestra a una experimental
  3. código editado / probado / comprometido en la rama experimental

Ahora, no estoy listo para fusionar experimental en maestro. Sin embargo, quiero devolverlo al repositorio remoto, ya que ese es el repositorio que comparto con algunos colegas. Me gustaría que vieran lo que he hecho en la rama experimental. Normalmente solo accedo al repositorio remoto a través de SSH.

¿Cómo comparto mi sucursal local en el repositorio remoto, sin afectar la sucursal maestra del repositorio remoto?


Este enlace también es muy útil en este aspecto. Compartiendo ramas git
Vishnu Kumar

Respuestas:


157

De acuerdo con la página del manual de git push :

 git push origin experimental

Encuentre una referencia que coincida experimentalen el repositorio de origen (lo más probable es que encuentre refs/heads/experimental), y actualice la misma referencia (p refs/heads/experimental. Ej. ) En el repositorio de origen con ella.
Si experimentalno existiera de forma remota, se crearía .

Esto es lo mismo que:

git push origin experimental:refs/heads/experimental

Cree la rama experimentalen el repositorio de origen copiando la experimentalrama actual .
Este formulario solo es necesario para crear una nueva rama o etiqueta en el repositorio remoto cuando el nombre local y el nombre remoto son diferentes ; de lo contrario, el nombre de referencia por sí solo funcionará.

O, como se menciona en el consejo de git , puede configurar un "control remoto predeterminado de la sucursal":

Puede usar git config para asignar un control remoto predeterminado a una rama determinada. Este control remoto predeterminado se usará para impulsar esa rama a menos que se especifique lo contrario.

Esto ya está hecho cuando usa git clone, lo que le permite usar git push sin ningún argumento para empujar la rama maestra local para actualizar la rama maestra del repositorio de origen.

git config branch.<name>.remote <remote> 

se puede usar para especificar esto manualmente.


Jan sugiere (para git> = 1.7.0 ) la opción push -u(o push --set-upstream):

Para cada rama que esté actualizada o que se haya enviado correctamente, agregue una referencia ascendente (seguimiento), utilizada por git-pull (1) sin argumentos y otros comandos.

De esa manera, no tienes que hacer ninguna configuración de git.

git push -u origin experimental

12
Debe usar la -uopción para pushasegurarse de que su sucursal local rastrea la remota después de hacerla pública. Si olvida usar la -uopción, puede escribir git push -uluego en la rama, y ​​luego git pullfuncionará.
Ene

Noté que cuando haces esto git push origin experimental, no hay evidencia de que se estén cargando paquetes. Parece que el control remoto ya tiene todo el material de su empuje anterior; solo tiene que estar conectado a los árbitros .
Kaz

@Kaz: tendría todo el material si esas nuevas confirmaciones ya se hubieran insertado en otra rama remota. En ese caso, git push origin experimentalsimplemente crearía la rama experimentalen el control remoto.
VonC

¡Gracias! Tu respuesta fue muy útil.
Hakre

15

Si el nombre de su sucursal es experimental, y el nombre del control remoto es origin, entonces es

git push origin experimental

El mismo comentario que el anterior, pero ¿crea eso la rama experimental implícitamente en el repositorio remoto, o lo empujará al maestro remoto?
Coocoo4Cocoa

1
empuja la rama experimental y no toca al maestro ni en el lado local ni de forma remota
John Douthat

1

git push -u <remote-name> <branch-name> no funciona si la rama recién creada no se genera desde el mismo repositorio, es decir, si no ha creado la nueva rama utilizando git checkout -b new_branch , entonces esto no funcionará.

Por ejemplo, había clonado dos repositorios diferentes localmente y tuve que copiar repo2 / branch1 a repo1 / y luego empujarlo también.

Este enlace me ayudó a enviar mi sucursal local (clonada desde otro repositorio) a mi repositorio remoto:



0

tl; dr

$ git push --set-upstream origin your_new_branch

más información

después de haber realizado algunas confirmaciones en su:

$ git checkout -b your_new_branch
$ git add file
$ git commit -m "changed file"

empuja su rama especificando un flujo ascendente en uno de los repositorios remotos como el siguiente:

$ git push --set-upstream REMOTE YOUR_BRANCH

los controles remotos pueden ser vistos por

$ git remote -v

por lo general, tendrá un único control remoto predeterminado origin. entonces tu comando se vería así:

$ git push --set-upstream origin your_new_branch

y todos los empujes consiguientes se pueden hacer solo con git push.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.