2010-05-29 46 views
78

Estoy tratando de actualizar un repositorio de git en github. Hice un montón de cambios, los agregué, me comprometí e intenté hacer un git push. La respuesta me dice que todo está actualizado, pero claramente no es así.Git push no hará nada (Todo al día)

git remote show origin 

responde con el repositorio que esperaría.

¿Por qué me dice git que el repositorio está actualizado cuando hay confirmaciones locales que no están 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) 

Respuesta

121

git push no empuja a todas sus sucursales locales: ¿cómo sabría a qué ramas remotas presionarlos? Solo activa las sucursales locales que se han configurado para enviar a una sucursal remota determinada.

En mi versión de Git (1.6.5.3), cuando corro git remote show origin que realmente muestre qué ramas están configurados 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 empujar a master sin tener que preocuparse acerca de todos ¡esta!

Cuando git clone, por defecto se configura su master rama local para empujar a master rama del control remoto (que localmente se conoce como origin/master), así que si sólo se compromete en master, entonces un simple git push siempre empujar los cambios espalda.

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

Cuando dice "Todo lo que está actualizado", significa que "todas las ramas que me indicó cómo presionar están actualizadas".

Q. Entonces, ¿cómo puedo impulsar mis compromisos?

Si lo que quieres hacer es poner sus cambios de develop en origin/master, entonces probablemente debería fusionarlas en su local de master luego empuje que:

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

Si lo que desea es crear un develop rama en el control remoto, separado de master, entonces hemos explicado antes git push:

git push origin develop 

que: crear una nueva rama en el control remoto llamado develop; y llevan esa rama al día con su sucursal local develop; ydevelop conjunto para empujar a origin/develop por lo que en el futuro, sin argumentos git pushsedevelop empuje automáticamente.

Si usted quiere empujar su local de develop a una rama remota llama algo que no sea develop, entonces se puede decir:

git push origin develop:something-else 

Sin embargo, esa forma no pondrá en marcha develop para siempre presione a origin/something-else en el futuro; es una operación de una sola vez.

+2

Gracias por los detalles. Estaba en la rama incorrecta = _ = –

+0

Muchas gracias, se desarrolló su origen de git push: algo-else ha dado respuesta a una pregunta que no pude obtener por un tiempo. – antroid

+0

En mi caso 'git push origin x' todavía no estaba configurando la rama x para ser empujada en el futuro. Se debió a un pushspec específico en la sección '.gitconfig'' [origen "remoto"] 'que causaba el comportamiento de git. – Raman

12

Probar:

git push --all origin 
+0

esto empuja las confirmaciones para separar las ramas en el repositorio, no de una rama en el maestro. –

-5
git push origin master 
1

También asegúrese de que su empujando a la rama correcta.

4

En este momento, parece que está en la rama de desarrollo. ¿Tienes una rama de desarrollo en tu origen? Si no, intente git push origin develop. git push funcionará una vez que sepa sobre una rama de desarrollo en su origen.

Como lectura adicional, me gustaría echar un vistazo a la git-push man pages, en particular, la sección de ejemplos.

+0

Tiene razón. Gracias. –

0

Gracias a Sam Stokes. Según su respuesta, puede resolver el problema de otra forma (lo usé de esta manera). Después de actualizar el directorio que debe desarrollar reinicializarla

git init 

A continuación, puede cometer y empujar cambios a dominar

17

Esto sucedió a mí cuando mi aplicación SourceTree estrelló durante puesta en escena. Y en la línea de comando, parecía que el anterior git add había sido dañado. Si este es el caso, intente:

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

O en el último comando, es posible que deba establecer la bifurcación.

git push --all origin master 

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

1

Esto me sucedió cuando ^C en medio de un git push a GitHub. Github no mostró que los cambios se hubieran realizado, sin embargo. Para solucionarlo, realicé un cambio en mi árbol de trabajo, comprometido y empujado nuevamente. Funcionó perfectamente bien.

0

su lugar, se podría intentar esto, usted no tiene que ir a la maestra, puede obligar directamente a empujar los cambios de la misma rama

Como se explicó anteriormente, cuando se hace un rebase, va a cambiar el historia en su rama. Como resultado, si intenta hacer un normal git push despué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 su rama. En su lugar, deberá usar la bandera -f o --force para decirle a Git que sí, que realmente sabe lo que está haciendo.Al realizar forzados, se recomienda encarecidamente establecer la configuración de configuración push.default en simple, que es la predeterminada en Git 2.0. Para asegurarse de que su configuración es correcta, ejecute:

$ git config --global push.default simple 

Una vez que es correcta, puede simplemente ejecutar:

$ git push -f 

y comprobar su solicitud de extracción. ¡Debe ser actualizado!

Vaya a la parte inferior de este LINK para obtener más información.

4

Por favor, intente cometer va a durar y luego git push origin HEAD:master

+0

Esto realmente funcionó. ¿Le gustaría explicar * por qué * funcionó? –

+0

Textualmente de documentos: 'Empuje la rama actual al maestro de coincidencia de ref remoto en el repositorio de origen. Esta forma es conveniente para empujar la rama actual sin pensar en su nombre local. – uruapanmexicansong

1

Para 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 git reset --hard. Esto me permitió realinearme con el servidor remoto. La adición de nuevos archivos modificados, y funcionando

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".