Actualización de post de confirmación después de empujar git

Necesito editar el post de confirmación. Ya hay algunos compromisos más además de eso. ¿Hay alguna manera de editar un post de compromiso en particular?

Intenté volver a establecer la base y volver a networkingactar el post de confirmación. Pero no me permitirá presionar.

Quejándose –

remoto: para evitar que pierdas el historial, se rechazaron las actualizaciones que no son de avance rápido

No puedes hacer lo que tratas de hacer con security .

Explicaré cómo puedes impulsar tus cambios, pero si lo haces, todos los que usen ese repository deberán tomar pasos adicionales para recuperarse. (Consulte la documentation de git rebase para get más explicaciones, en general, no debe volver a establecer las correlaciones que se enviaron a un control remoto).

Entonces primero, ¿por qué es eso?

Tiene que ver con la manera en que git almacena y trata el contenido, y detecta los cambios. Cada confirmación tiene una ID única que es un hash SHA1 de la confirmación. Digamos que comienzas con esto:

 A --- B --- C --- D <--(master)(origin/master) 

Si cambia el post de confirmación en B , el hash calculado debe cambiar, por lo que, en lo que respecta a git, tiene un nuevo compromiso (digamos B' ) muy similar al anterior.

 A --- B --- C --- D <--(master)(origin/master) \ B' 

Bueno, los datos para C incluyen su hash padre (que es B , no B' ), por lo que tener un compromiso cuyo padre es B' significa que tiene que replace C con un nuevo compromiso C' . Y esto continuará hasta HEAD.

 A --- B --- C --- D <--(origin/master) \ B' --- C' --- D' <--(master) 

Ahora, git no quiere, de forma pnetworkingeterminada, permitirle mover el formulario de origin/master D a D' porque confundirá las suposiciones hechas en cualquier otro repository que haya clonado desde el origin .

Puedes forzarlo para que te permita impulsar tu cambio de todos modos al decir

 git push -f 

pero si lo haces:

1) Deberá verificar luego que nadie más haya cometido nada después de D para dominar. Si lo hicieran, tendrías que volver a establecer esos cambios en D'

2) Todos los demás tendrán que tomar medidas adicionales para resincronizar sus sucursales con origin , y tendrán que volver a establecer los cambios locales que planearon impulsar para master también. (Si en su lugar fuerzan su impulso, entonces moverán la reference remota de return a la línea anterior, restaurando el post de confirmación original en B , y usted estará en un estado quebrado. Usted y cualquiera que haya cambiado correctamente a D' harán. potencialmente puede perder cambios. Esto puede ir y venir bastante desorderado si se le permite hacerlo, por lo que debe asegurarse de que todo el equipo esté a bordo con la forma correcta de recuperarse de la rebase aguas arriba).

Si vale la pena todo eso para cambiar el post, así es como lo haces.

Una vez que envías una confirmación a un repository remoto, es una mala idea editar o eliminar esa confirmación, ya que esto arruinará a cualquiera que haya sido retirado de ese control remoto. Si insistes en hacer esto de todos modos, git push -f anulará esta comprobación (a less que el repository remoto esté configurado para no permitir esto).