Confirmé un cambio y olvidé agregar un archivo al conjunto de cambios. Después de otras confirmaciones, me di cuenta de que el archivo ahora falta en una HEAD^4
confirmación.
¿Cómo reescribo una confirmación anterior para incluir el archivo que falta?
git
git-commit
Kolrie
fuente
fuente
Respuestas:
Use
git rebase --interactive HEAD~4
y establezca laedit
opción para el compromiso que desea modificar.Recuerde que no debe modificar las confirmaciones enviadas al repositorio remoto de esta manera. En ese caso, es mejor agregar una nueva confirmación con un archivo faltante.
fuente
git push -f
si estoy seguro de que el río arriba no cambió?add
editado los archivos que faltaban, así que hice una confirmación con "xxx" como mensaje. Luego hice el comando rebase, y cambié la confirmación "xxx" de "seleccionar" a "editar". Luego hice "git rebase --continue". Ahora, cuando miro el historial, tengo "xxx" como la última confirmación, ¡y la confirmación anterior a la que quería agregarlos no ha cambiado! Me pregunto dónde fue mi error.Me doy cuenta de que la gente puede buscar en Google y venir aquí para encontrar una respuesta más simple: ¿Y si fuera solo la última confirmación? (La pregunta de OP es para arreglar el cuarto compromiso en la historia)
En el caso de que se comprometa y se dé cuenta de que olvidó agregar algún archivo inmediatamente , simplemente haga:
Donde
--no-edit
mantendrá el mismo mensaje de confirmación.¡Pan comido!
fuente
--amend
tienen diferentes hashesHEAD^4
. Está bien como está, solo como un apéndice como referencia. ;)Si NO ha enviado estas 4 confirmaciones, puede hacerlo de la siguiente manera:
Cree archivos de parche para todas estas confirmaciones:
Retroceda 4 confirmaciones:
Agregar archivo faltante:
Compromételo con
--amend
:Aplicar todos los parches guardados nuevamente:
Si ha presionado, NO debe utilizar este método. En su lugar, solo admite tu error y crea una confirmación más además de HEAD que soluciona este problema.
fuente
git format-patch
/git am
mucho mejor. Lo más importante es que te da más confianza si echas a perder algo: la confirmación guardada como parche en un archivo físico es tu mejor red de seguridad.git gc
:)rm *.patch
)Aunque la respuesta aceptada es correcta, carece de instrucciones detalladas sobre cómo realizar la edición de una confirmación durante un proceso de rebase.
Primero, inicie un proceso de rebase:
Se presentará una lista de confirmaciones, elegir una confirmación que desea modificar cambiando la palabra
pick
aedit
y guardar el archivo.Realice las modificaciones necesarias en su código (recuerde invocar
git add
nuevos archivos)Una vez realizadas todas las modificaciones, emita
git commit --amend
: esto modificará una confirmación marcada comoedit
Invocar
git rebase --continue
que terminará el proceso (si hay más confirmaciones marcadas comoedit
, los pasos anteriores deben repetirse)Notas importantes:
NO elimine las líneas marcadas como
pick
que no desea editar, déjelas como están. Eliminar estas líneas resultará en la eliminación de confirmaciones relacionadasGIT te obliga a hacerlo
stash
antes de cambiar la base si tu directorio de trabajo no está limpio; Sin embargo, puedegit stash pop / git stash apply
durante el rebase, para enmendar estos cambios (es decir, los cambios guardados antes de iniciar el proceso de rebase) a una confirmación marcada comoedit
si algo salió mal y desea revertir los cambios realizados durante el proceso de rebase antes de que finalice (es decir, desea volver al punto antes de iniciar el rebase), use
git rebase --abort
- también lea: Cómo abortar una rebase interactiva si --abort doesn ' t trabajo?Como se dice en la respuesta aceptada:
La respuesta por qué, está en el Libro de Git (párrafo titulado " Los peligros de volver a basar "):
fuente