2011-02-22 13 views
27

Podría usar una mano para aprender a mover una rama local a una rama remota. Por favor ver más abajo. Ayuda muy apreciada!empujando a git remote branch

La rama local fue creado después de clonar el repositorio a continuación, haciendo

$ git checkout -b mybranch remotes/origin/mybranch 

$ git branch -a 
    master 
* mybranch 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 
    remotes/origin/mybranch 

Pero cuando se trata de impulsar cambios en una copia de seguridad:

$ git push mybranch mybranch 
fatal: 'mybranch' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 

$ git push remotes/origin/mybranch mybranch 
fatal: 'mybranch' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 

$ git push origin/mybranch mybranch 
fatal: 'mybranch' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 

Respuesta

42

Trate

git push origin mybranch 

Esto empuja a su sucursal llamado mybranch en el control remoto llamado origen

+0

gracias abizern! Parece obvio una vez que entienda :) – julio

80

Como dice Abizern, esto funciona:

git push origin mybranch 

Pero, a explicar con más detalle, la MyBranch parte es un refspec. Esto especifica la referencia remota que debe actualizarse con la confirmación local dada.

Por lo tanto, el comando anterior es equivalente a:

git push origin mybranch:mybranch 

o incluso:

git push origin mybranch:refs/heads/mybranch 

y, de hecho, ya que estás en el MyBranch locales, que podría haber hecho:

git push origin HEAD:mybranch 

Esto es bueno de entender, porque a menudo me encuentro haciendo cosas como:

git push origin HEAD^:mybranch 

donde desea empujar todo menos el parche superior a la rama remota.

Por último, si desea eliminar el MyBranch a distancia, que hace:

git push origin :mybranch 
+11

1 por no ser perezoso :) – Abizern

+2

gracias por la explicación detallada markmc – julio

+2

Debido a que el refspec es : , dejando fuera la parte , esto básicamente dice que hacer la rama tema en el control remoto nada, que lo elimina. [fuente] (http://git-scm.com/book/ch9-5.html) - último párrafo –

6

Esta es una vieja pregunta, pero se usa esta página como referencia en su día, y tener una respuesta con una perspectiva diferente. Según mi experiencia, la mejor manera es modificar la configuración de tu configuración de modo que git push sea todo lo que tendrás que ingresar al final.

Va a empujar a la misma rama remota que actualice el código de:

  • git config --global push.default upstream

Y ahora, se establece la rama remota como aguas arriba (si no lo estaba ya) :

  • git branch --set-upstream-to origin/the_master
  • NOTA: Las versiones anteriores pueden caer bac k sobre esta forma obsoleta del comando /.
  • git branch --set-upstream local_branch origin/the_master

Tiene dos ramas - un local y un mando a distancia. Hacer un git pull o git push sin argumentos debería, y lo hará ahora, hacer lo que quiera. Esto no lo limitará a presionar a sucursales remotas con el mismo nombre que el local, como lo hacen algunos de los comandos anteriores.

Una última cosa que suelo hacer: git pull modifico para cambiar de esta secuencia:

  • git fetch && git merge [remote_upstream] a
  • git fetch && git rebase [remote_upstream]

Con este comando: git config --global branch.autosetuprebase remote