¿Por qué no puedo empujar una confirmación vacía?

35
  git commit --amend --allow-empty

luego

  git push origin master

el idiota dijo que

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'remoteurl'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

¿Por qué? ¿Cómo arreglar esto?


fuente

Respuestas:

56

El problema no es que esté presionando una confirmación vacía .
Se trata de empujar un commit diferente (uno con un SHA1 diferente) que el commit ya empujado.
Eso es lo que git commit --amendhace: modificó la última confirmación, no crea una nueva.

Eso significa que está empujando una historia diferente a la que otros ya podrían haber clonado.
Si está seguro de que no será un problema, debe forzar el empuje:

git push -f origin master

Deberías haber hecho:

git commit --allow-empty

Habría creado una nueva confirmación (vacía), que podría haber presionado sin ningún problema.

VonC
fuente
5

Si desea crear una solicitud de extracción en Github. Usted puede:

git commit --allow-empty -m "make pull request"

Luego cree una solicitud de extracción sin cambios.

1 rinoceronte
fuente
3

Para aclarar la respuesta aceptada, ya que no tengo suficiente reputación para comentar:

Cuando usas

git commit --amend

que hace crear una nueva confirmación. Sin embargo, no lo agrega al commit actual, lo agrega al padre del commit actual. Visualmente, se vería como un tenedor.

  O (old commit)
 /
O-O (amended commit)

Git interpreta esto como una divergencia del control remoto. Es por eso que no te permitirá empujarlo sin forzarlo.

Dustin
fuente
0

Asegúrese de que la rama remota a la que intenta ingresar no esté actualmente desprotegida. Una vez hice un repositorio de git en uno de mis servidores y no pude entender por qué no podía presionarlo. Después de un día de solución de problemas, descubrí que no podía ingresar al repositorio (o la rama que quería) mientras estaba desprotegido en el repositorio del servidor. Entonces, simplemente hice una nueva rama que compruebo cuando termine de hacer cambios en el servidor, y luego puedo empujar al servidor. Puede que este no sea su problema, pero recibí un error similar a este cuando tuve un problema al presionar un git vacío en mi servidor.

Prevenido
fuente