git Olvidé editar una línea antes de comprometerme y empujar

Decidí integrar una biblioteca en mi código. Agrego la biblioteca y cambio un par de líneas de código para comenzar a implementarlo. Se comstack, así que me comprometo y presiono al repository.

Solo me di count más tarde que me perdí una línea que todavía está en el código anterior. Le doy una búsqueda en Google y descubro el git commit --amend , y afortunadamente para mí, no hay otros compromisos. Pensé que todo lo que tenía que hacer era arreglar la línea de código, git add el file, git commit --amend , y finalmente git push eso al repository, pero git me dice

! [rechazado] maestro -> pista maestra (avance rápido): las actualizaciones fueron rechazadas porque la punta de su twig actual está detrás

Me parece extraño, ya que estoy en el último compromiso y si me git reset -soft HEAD~1 , estoy de return a estar alineado con el repository, además de la única línea de código que he cambiado.

¿Lo estoy haciendo mal? Realmente no quiero hacer un compromiso completamente nuevo solo para esta única línea de código que debería haber sido parte de la última confirmación.

Si realmente desea modificar la confirmación, deberá forzar la derivación al control remoto:

 git push origin master --force 

Tenga en count que esto sobrescribirá la twig remota, lo que podría causar esgulps en cualquier otra persona que comparta la twig.

Además, debe asegurarse de que no se hayan agregado nuevas confirmaciones a la sucursal remota desde la confirmación que está intentando modificar. Forzar a su sucursal derribará cualquier trabajo nuevo de alguien que no sea usted, que se hizo después del compromiso en cuestión.

Como puede ver, hay muchas cosas que podrían salir mal aquí. Entonces, una estrategia mucho más segura, y lo que recomiendo para usted, es simplemente arreglar la línea faltante de código en una nueva confirmación y luego enviar sus cambios al control remoto.

Actualizar:

La razón por la que recibía las Updates were rejected because the tip of your current branch is behind error porque la modificación de la confirmación en la CABEZA de su sucursal local hizo que su sucursal local divergiera del control remoto. Aquí hay un diagtwig que muestra cómo se veían las twigs master locales y remotas antes de la modificación:

 remote: A -- B -- C local: A -- B -- C 

En otras palabras, estabas actualizado. Sin embargo, cuando enmendó el commit C localmente, en realidad lo reemplazó con un commit completamente nuevo (con un nuevo hash SHA-1). Aquí se muestra el aspecto del diagtwig después de la modificación:

 remote: A -- B -- C local: A -- B -- C' 

Cuando intentaste empujar, Git pensó que el compromiso B era el ancestro común, y que realmente estabas detrás del master remoto. Otra forma de dibujar esto es:

 remote: A -- B -- C local: \_ C' 

Git no se da count de que tiene la intención de modificar su compromiso para replace C en el control remoto, por lo que debe hacer un esfuerzo de fuerza para lograrlo.