git push a una rama específica

102

Incluso después de leer esta pregunta: git-push-current-branch , sigo teniendo dificultades para averiguar cómo debo escribir mi comando git push. Como se menciona en el enlace de la pregunta, no está claro en la documentación.

Me gustaría usar mi ejemplo del "mundo real". Lo siguiente es lo que veo cuando hago un git statuscomando en el nivel superior de mi rama:

En la rama amd_qlp_tester

Su rama está por delante de 'origin / amd_qlp_tester' por 5 confirmaciones.

etc ...

Así que el nombre de mi rama es amd_qlp_testerpero se "bifurcó" de la rama principal (si tengo los términos incorrectos es por mi experiencia en SVN). Pero también está el nombre `origin / amd_qlp_testser '

Entonces, ¿cómo expreso mi comando push?

¿Es alguno de los siguientes?

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push
code_fodder
fuente

Respuestas:

92

git push origin amd_qlp_testerfuncionará para usted. Si solo escribe git push, el control remoto de la rama actual es el valor predeterminado.

Sintaxis de empuje es similar al siguiente - git push <remote> <branch>. Si observa su .git/configarchivo remoto en , verá una entrada [remote "origin"]que especifica la URL del repositorio. Entonces, en la primera parte del comando, le dirá a Git dónde encontrar el repositorio para este proyecto, y luego solo especificará una rama.

Petr Mensik
fuente
Gracias por eso :), ¿puede explicar por qué son dos "palabras" separadas cuando la descripción del estado de dit lo muestra como una ruta, es decir, por qué es origin amd_qlp_testsery no?origin/amd_qlp_tester
code_fodder
El "remoto" predeterminado se basa en la configuración de la rama actual (en este caso sí lo será origin). Las ramas para enviar valores predeterminados (en las versiones actuales de git) :si no están configuradas, lo que significa matching, pero se supone que eso cambiará en el futuro.
torek
Estoy un poco confundido, estoy usando v2.10, cuando escribo git pushintenta empujar todas las ramas rastreadas, al contrario de lo que dijiste ("el control remoto de la rama actual es el valor predeterminado").
Roberto
Git 2.x debería usar una simpleestrategia de inserción, lo que significa que solo impulsará la rama actual. blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
Petr Mensik
fatal: Couldn't find remote ref branch-name-here
doug65536
112

Si su sucursal local y su sucursal remota tienen el mismo nombre, puede hacerlo:

git push origin branchName

Cuando el nombre de su sucursal local y remota es diferente, puede hacerlo:

git push origin localBranchName:remoteBranchName
Imranmadbar
fuente
Esto fue muy útil, difícil de encontrar :)
Pe Dro hace
Sí, tienes razón, ¡también es difícil de recordar!
Imranmadbar hace
8

Las respuestas en la pregunta a las que se vinculó tienen que ver con configurar git para que pueda ingresar git pushcomandos muy cortos y hacer que hagan lo que quiera. Lo cual es genial, si sabes lo que quieres y cómo se escribe eso en Git-Ese, ¡pero eres nuevo en git! :-)

En su caso, la respuesta de Petr Mensik es la (bueno, "a") correcta. Este es el por qué:

El comando busca en su archivo para encontrar el "remoto" llamado (por ejemplo, ). El archivo de configuración enumera:git push remote.git/configorigin

  • donde (en cuanto a URL) ese remoto "vive" (p. ej., )ssh://hostname/path
  • donde van los empujones, si son diferentes
  • qué se empuja, si no dijiste qué rama (s) empujar
  • lo que se busca cuando corres git fetch remote

Cuando clonó por primera vez el repositorio, siempre que fuera, git configuró valores predeterminados para algunos de estos. La URL es lo que haya clonado y el resto, si está configurado o no, son todos valores predeterminados "razonables" ... o, hmm, ¿ lo son ?

El problema con estos es que la gente ha cambiado de opinión, con el tiempo, en cuanto a lo que es "razonable". Entonces, ahora (dependiendo de su versión de git y si ha configurado las cosas en detalle), git puede imprimir muchas advertencias sobre cambios predeterminados en el futuro. Agregar el nombre de la "rama para empujar" - amd_qlp_tester- (1) la cierra y (2) empuja solo esa rama.

Si desea empujar de manera más conveniente, puede hacerlo con:

git push origin

o incluso:

git push

pero si eso hace lo que quieres, depende de si estás de acuerdo con los "primeros autores de git" en que los valores predeterminados originales son razonables, o con los "autores de git posteriores" en que los valores predeterminados originales no son razonables. Entonces, cuando desee hacer todas las cosas de configuración (eventualmente), vea la pregunta (y las respuestas) a la que se vinculó.

En cuanto al nombre origin/amd_qlp_testeren primer lugar: en realidad es una entidad local (un nombre guardado dentro de su repositorio), aunque se llama "rama remota". Es la mejor suposición de git sobre "dónde amd_qlp_testerestá allí". Git lo actualiza cuando puede .

torek
fuente
1
Gracias por la explicación, creo que lo tengo claro ahora. Me gusta ser preciso, así que me git push origin amd_qlp_tester
atendré
2

Me gustaría agregar una respuesta actualizada; ahora he estado usando git por un tiempo, encuentro que a menudo uso los siguientes comandos para hacer cualquier empuje (usando la pregunta original como ejemplo):

  • git push origin amd_qlp_tester- empuje a la rama ubicada en el remoto llamado originen la rama remota llamada amd_qlp_tester.
  • git push -u origin amd_qlp_tester- igual que el último, pero configura el enlace ascendente de la rama local a la rama remota para que la próxima vez pueda usarlo git push/pullsi aún no está vinculado (solo es necesario hacerlo una vez).
  • git push - Una vez que haya configurado el upstream, puede usar esta versión más corta.

La -u opción Nota es la versión corta de --set-upstream; son lo mismo.

code_fodder
fuente