Soy nuevo gity estoy practicando. Creé una sucursal local pero vi que cuando lo hice, git pushmi sucursal no estaba cargada en el repositorio. Tenía que hacer realidad: git push -u origin --all.
¿Por qué es esto? ¿No es una rama un nuevo cambio que se va a impulsar de forma predeterminada? ¿Por qué necesito ejecutar el segundo comando?
git
version-control
Cratilo
fuente
fuente

push.default, verman git-config). Si lo hacegit config --add push.default current,git pushcreará automáticamente la rama en el repositorio remoto si es necesario. Por qué este no es el valor predeterminado se explica en las respuestas.current' y 'upstream', consulte mi respuesta anterior stackoverflow.com/a/13751847/6309 .Respuestas:
La razón real es que, en un nuevo repositorio (git init), no hay rama (no
master, ninguna rama, cero ramas)Entonces, cuando está presionando por primera vez a un repositorio ascendente vacío (generalmente uno desnudo ), ese repositorio ascendente no tiene una rama del mismo nombre.
Y:
matching' (inserte todas las ramas del mismo nombre, creándolas si no existen),simple' (inserte solo la rama actual, y solo si tiene una rama de seguimiento remoto con un nombre similar en sentido ascendente, desde git 1.7.11 )En ambos casos, dado que el repositorio vacío ascendente no tiene rama:
Eso significa que su primer impulso local no tiene idea:
Entonces necesita al menos hacer un:
Pero si solo haces eso, tú:
masterrama ascendente en el ascendente (ahora repositorio no vacío): bueno.master' necesita ser empujada a upstream (origin) 'master' (rama ascendente): mal.Es por eso que se recomienda, para el primer impulso, hacer un:
Que registrará
origin/mastercomo una rama de seguimiento remoto , y permitirá a la próxima empuje para empujar de forma automáticamasteraorigin/master.Y eso también funcionará con las políticas de empuje '
current' o 'upstream'.En cada caso, después de la inicial
git push -u origin master, un simple git push será suficiente para continuar empujando master a la rama aguas arriba derecha.fuente
git pushtambién espera que la rama ya exista?simple': empuje a cualquier rama ascendente registrada, si esa rama ascendente tiene el mismo nombre que la local. Un simplegit pushserá suficiente.git push --set-upstream origin new_branchogit push -u origin new_branchpara abreviar. El-allque utilizó el interrogador omitió nombrar una nueva rama específica al incluir todas las ramas. Esto está cubierto por + Klas Mellbourn en su respuesta.No, mira abajo
Encuentro esta 'característica' bastante molesta ya que no estoy tratando de lanzar cohetes a la luna, solo empujo mi maldita rama. ¡Probablemente también lo hagas o no estarías aquí!
Aquí está la solución: si desea que empuje implícitamente la rama actual, independientemente de si esa rama existe en el origen, simplemente emita este comando una vez y nunca más tendrá que volver a hacerlo:
Entonces, si haces ramas como esta:
y luego hacer algunos commits y luego hacer un
para llevarlos al origen (estar en esa rama) y creará dicha rama para ti si no existe.
Tenga en cuenta que el bit -u se asegura de que estén vinculados si fuera a extraerlo de dicha rama. Si no tiene planes de tirar de la rama más tarde (o si está de acuerdo con otro revestimiento si lo hace) -u no es necesario.
fuente
git push -uSalida de
git pushal empujar una nueva ramaUn simple
git pushsupone que ya existe una rama remota que la rama local actual está rastreando. Si no existe tal rama remota, y desea crearla, debe especificar eso utilizando el indicador-u(forma corta de--set-upstream).¿Por qué esto es así? Supongo que los implementadores sintieron que crear una rama en el control remoto es una acción tan importante que debería ser difícil hacerlo por error.
git pushes algo que haces todo el tiempo."¿No es una rama un nuevo cambio que se va a impulsar de forma predeterminada?" Yo diría que "un cambio" en Git es un compromiso. Una rama es un puntero a una confirmación. Para mí tiene más sentido pensar en un empuje como algo que empuja los compromisos a los otros repositorios. Las confirmaciones que se envían están determinadas por la rama en la que se encuentra y la relación de seguimiento de esa rama con las ramas en el control remoto.
Puede leer más sobre el seguimiento de ramas en el capítulo Ramas remotas del libro Pro Git .
fuente
fatalrecibí un mensaje pero ya había hecho una confirmación en la rama. ¿Importa esto?git push -u origincopió al repositorio remoto.fatalmensaje como el que mencionas en la respuesta. ¿Esta diferencia depende del hecho de que le haya enviado algo a la sucursal?fatalmensaje. Supongo que la diferencia depende exactamente de qué implementación de git está utilizando. Mi salida es de 1.8.1.msysgit.1 ejecutándose en Windows 8.No pude encontrar una justificación de los desarrolladores originales tan rápido, pero puedo darle una suposición educada basada en algunos años de experiencia en Git.
No, no todas las sucursales son algo que desea impulsar al mundo exterior. Podría representar un experimento privado.
Además, ¿a dónde deben
git pushenviar todas las sucursales? Git puede funcionar con múltiples controles remotos y es posible que desee tener diferentes conjuntos de ramas en cada uno. Por ejemplo, un proyecto central del repositorio de GitHub puede tener sucursales de lanzamiento; una bifurcación de GitHub puede tener ramas temáticas para su revisión; y un servidor Git local puede tener ramas que contengan configuración local. Sigit pushempujaría todas las ramas al control remoto que rastrea la rama actual, este tipo de esquema sería fácil de arruinar.fuente
It might represent a private experimentOk, pero ¿cuál es el gran problema? La rama "principal" en la que todos están trabajando,masteres decir, no se ve afectada. A menos que quieras mantener oculto el código fuente 2)git push, without a remote, pushes to the current branch's remoteTe perdí aquí :(git fetchcientos de ramas a medias trabajando cada vez. 2) Me refiero algit pushcomportamiento predeterminado de. Le informa al control remoto que la rama actual está rastreando, si la hay.HEAD es la abreviatura de la rama actual, por lo que git push -u origin HEAD funciona. Ahora para evitar este tipeo cada vez que uso un alias:
git config --global alias.pp 'push -u origin HEAD'
Después de esto, cada vez que quiero empujar una rama creada a través de git -b branch, puedo empujarla usando:
git pp
Espero que esto ahorre tiempo para alguien!
fuente
En el primer cheque
Paso 1:
git remote -v// si se encuentra git initialize, luego elimine u omita el paso 2
Paso 2:
git remote rm origin// Luego configura tu dirección de correo electrónico globalmente git
Paso 3:
git config --global user.email "[email protected]"Paso 4:
git initialPaso 5:
git commit -m "Initial Project"// Si ya agrega el repositorio del proyecto, omita el paso 6
Paso 6:
git remote add origin %repo link from bitbucket.org%Paso 7:
git push -u origin masterfuente
Acabo de experimentar una mayor permutación de este problema.
Tenía una sucursal nombrada
feat/XYZ-1234-some-descriptionporque estaba trabajando en el problema 123 de Jira. Durante el trabajo, creé un nuevo problema de Jira para rastrear un trabajo más pequeño, y cuando llegué a empujar decidí empujar a un nombre de sucursal con este nuevo número de problema en:Esto me dio el error que se discute en este hilo SO. Pero como estaba tratando de pasar a un nombre de sucursal diferente de mi sucursal actual, mi problema era diferente al descrito aquí. Terminé cambiando el nombre de mi sucursal local antes de poder impulsarla:
Después de un poco más de lectura alrededor me di cuenta de que podría haber establecido una
srcen elgit push, ya sea para el nombre de la rama actual, o simplementeHEADen su caso:fuente
Si habilita para impulsar nuevos cambios desde su nueva sucursal la primera vez. Y debajo del error:
Para empujar la rama actual y configurar el control remoto como ascendente, use
fuente