Git push no hará nada (todo actualizado)


100

Estoy intentando actualizar un repositorio de Git en GitHub. Hice un montón de cambios, los agregué, me comprometí y luego intenté hacer un git push. La respuesta me dice que todo está actualizado, pero claramente no lo está.

git remote show origin

responde con el repositorio que esperaba.

¿Por qué Git me dice que el repositorio está actualizado cuando hay confirmaciones locales que no son visibles en el repositorio?

  [searchgraph]  git status
# On branch develop
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Capfile
#       config/deploy.rb
nothing added to commit but untracked files present (use "git add" to track)

  [searchgraph]  git add .

  [searchgraph]  git status
# On branch develop
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   Capfile
#       new file:   config/deploy.rb
#

  [searchgraph]  git commit -m "Added Capistrano deployment"
[develop 12e8af7] Added Capistrano deployment
 2 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 Capfile
 create mode 100644 config/deploy.rb

  [searchgraph]  git push
Everything up-to-date

  [searchgraph]  git status
# On branch develop
nothing to commit (working directory clean)

Respuestas:


142

git pushno empuja a todas sus sucursales locales: ¿cómo sabría a qué sucursales remotas enviarlas? Solo empuja las sucursales locales que se han configurado para enviarlas a una sucursal remota en particular.

En mi versión de Git (1.6.5.3), cuando lo ejecuto, git remote show originen realidad imprime qué ramas están configuradas para empujar:

Local refs configured for 'git push':
  master pushes to master (up to date)
  quux   pushes to quux   (fast forwardable)

P. ¡Pero podría seguir masteradelante sin preocuparme por todo esto!

Cuando usted git clone, de forma predeterminada, configura su mastersucursal local para enviar a la mastersucursal remota (a la que se hace referencia localmente origin/master), por lo que si solo se compromete master, entonces un simple git pushsiempre retrocederá sus cambios.

Sin embargo, desde el fragmento de salida que publicó, está en una rama llamada develop, que supongo que no se ha configurado para enviar nada. Entoncesgit push sin argumentos, no empujará las confirmaciones en esa rama.

Cuando dice "Todo actualizado", significa "todas las sucursales que me ha dicho cómo presionar están actualizadas".

P. Entonces, ¿cómo puedo impulsar mis confirmaciones?

Si lo que quiere hacer es poner sus cambios de developen origin/master, entonces probablemente debería fusionarlos en su local y masterluego presionar eso:

git checkout master
git merge develop
git push             # will push 'master'

Si lo que desea es crear una developrama en el control remoto, por separado master, proporcione argumentos para git push:

git push origin develop

Eso: creará una nueva rama en el control remoto llamado develop; y actualice esa sucursal con su developsucursal local ; y configurar developpara empujar a origin/developpara que en el futuro, git pushsin argumentos , empuje developautomáticamente.

Si desea enviar su local developa una sucursal remota llamada algo diferente a develop , entonces puede decir:

git push origin develop:something-else

Sin embargo, ese formulario no se configurará developpara presionar siempre origin/something-elseen el futuro; es una operación de una sola vez.


Muchas gracias, su origen de git push se desarrolló: algo más ha dado respuesta a la pregunta que no pude obtener por un tiempo.
Antroid

1
En mi caso git push origin x, todavía no estaba configurando la rama x para ser empujada en el futuro. Se debió a una pushspec específica en la .gitconfig [remote "origin"]sección que estaba causando el comportamiento de git.
Raman

27

Esto me sucedió cuando mi aplicación SourceTree se bloqueó durante la preparación. Y en la línea de comandos, parecía que el anterior se git addhabía corrompido. Si este es el caso, intente:

git init
git add -A
git commit -m 'Fix bad repo'
git push

En el último comando, es posible que deba configurar la rama.

git push --all origin master

Tenga en cuenta que esto es suficiente si no ha hecho ninguna ramificación o algo por el estilo. En ese caso, asegúrese de presionar a la rama correcta como git push origin develop.


15

Tratar:

git push --all origin

esto empuja a las confirmaciones a separar ramas en el repositorio, no de una rama al maestro.
Sreedevi J

13

Intente ir a la última confirmación y luego hágalo git push origin HEAD:master.


1
Esto realmente funcionó. ¿Le gustaría explicar por qué funcionó?
René Nyffenegger

Textualmente de documentos:Push the current branch to the remote ref matching master in the origin repository. This form is convenient to push the current branch without thinking about its local name.
uruapanmexicansong

También funcionó para mí
Jerad Rutnam

Comparé cómo está configurado mi repositorio y todas las ramas se veían iguales. Sin embargo, en una de las ramas que no podía usar simplemente git push: / Esto funcionó para mí, así: git push origin HEAD:my_branch_name.
iaforek

6

En mi caso, ninguna de las otras soluciones funcionó. Tuve que hacer una copia de seguridad de los nuevos archivos modificados (que se muestran con git status) y ejecutar un archivo git reset --hard. Esto me permitió realinearme con el servidor remoto. Agregar nuevos archivos modificados y ejecutar

git add .
git commit -am "my comment"
git push

Hizo el truco. Espero que esto ayude a alguien, como una solución de "última oportunidad".


4

En este momento, parece que estás en la rama de desarrollo. ¿Tiene una rama de desarrollo en su origen? Si no es así, inténtalo git push origin develop. git pushfuncionará una vez que conozca una rama de desarrollo en su origen.

Como lectura adicional, echaría un vistazo a las páginas de manual de git-push , en particular, a la sección de ejemplos.


3

Para ser específico, si desea fusionar algo para dominar, puede seguir los pasos a continuación.

git add --all // If you want to stage all changes other options also available
git commit -m "Your commit message"
git push // By default when it clone is sets your origin to master or you would have set sometime with git push -u origin master.

Es una práctica común en el modelo de solicitud de extracción crear en una nueva rama local y luego enviar esa rama a remota. Para eso, debe mencionar dónde desea impulsar sus cambios a distancia. Puede hacer esto mencionando el control remoto en el momento de presionar.

git push origin develop // It will create a remote branch with name "develop".

Si desea crear una sucursal que no sea el nombre de su sucursal local, puede hacerlo con el siguiente comando.

git push origin develop:some-other-name

2

Gracias a Sam Stokes. De acuerdo con su respuesta, puede resolver el problema de diferente manera (yo usé de esta manera). Después de actualizar su directorio de desarrollo, debe reiniciarlo

git init

Luego, puede confirmar y enviar actualizaciones a master


1
¡Gracias! En mi caso, escriba: git inity abra una nueva pestaña de comando, escriba:git push origin branch_name
s7ven

2

Esto me sucedió cuando estaba ^Cen medio de unagit push a GitHub. Sin embargo, GitHub no mostró que se hayan realizado los cambios.

Para solucionarlo, hice un cambio en mi árbol de trabajo, me comprometí y luego presioné nuevamente. Funcionó perfectamente bien.


2

Esto me pasó a mí. Simplemente volví a comprometer los cambios y luego presioné.


2

Probé muchos métodos, incluidos los definidos aquí. Lo que tengo es

  • Asegúrese de que el nombre del repositorio sea válido. La mejor manera es copiar el enlace del sitio del repositorio y pegarlo en git bash.

  • Asegúrese de haber confirmado los archivos seleccionados.

    git commit -m "Your commit here"
    
  • Si ambos pasos no funcionan, intente

    git push -u -f origin master


1

En su lugar, puede intentar lo siguiente. No tienes que ir amaster ; puede forzar directamente los cambios desde su propia rama.

Como se explicó anteriormente, cuando realiza un rebase, está cambiando el historial en su rama. Como resultado, si intentas hacer algo normal git pushdespués de una rebase, Git lo rechazará porque no hay una ruta directa desde la confirmación en el servidor hasta la confirmación en tu rama. En su lugar, deberá usar la marca -fo --forcepara decirle a Git que sí, que realmente sabe lo que está haciendo. Al realizar empujes forzados, se recomienda encarecidamente que establezca su push.defaultconfiguración de configuración en simple, que es la predeterminada en Git 2.0. Para asegurarse de que su configuración sea correcta, ejecute:

$ git config --global push.default simple

Una vez que sea correcto, puede ejecutar:

$ git push -f

Y verifique su solicitud de extracción. ¡Debería actualizarse!

Vaya al final de Cómo volver a basar una solicitud de extracción para obtener más detalles.


0

También asegúrate de empujar hacia la rama correcta.


0

Esto me sucedió una vez que intenté empujar desde una nueva rama y usé en su git push origin masterlugar. Deberías:

  • Use: git push origin your_new_branchsi desea que esta rama también ocurra en el repositorio remoto.
  • De lo contrario, consulte su rama maestra, fusione las cosas y luego presione desde el maestro hasta el repositorio de git con git merge origin master.

Recapitulación: el punto aquí es que debe verificar dónde ofrece el segundo parámetro para git merge. Entonces, si está en el maestro, use maestro como segundo parámetro, si está en new_branch, use esto como segundo parámetro si desea mantener esta rama en el repositorio remoto; de lo contrario, opte por la segunda opción anterior.


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.