Cambié varias cosas durante la última hora y las comprometí paso a paso, pero me di cuenta de que olvidé agregar un archivo modificado hace algunas confirmaciones.
El registro se ve así:
GIT TidyUpRequests u:1 d:0> git log
commit fc6734b6351f6c36a587dba6dbd9d5efa30c09ce
Author: David Klein <>
Date: Tue Apr 27 09:43:55 2010 +0200
The Main program now tests both Webservices at once
commit 8a2c6014c2b035e37aebd310a6393a1ecb39f463
Author: David Klein <>
Date: Tue Apr 27 09:43:27 2010 +0200
ISBNDBQueryHandler now uses the XPath functions from XPath.fs too
commit 06a504e277fd98d97eed4dad22dfa5933d81451f
Author: David Klein <>
Date: Tue Apr 27 09:30:34 2010 +0200
AmazonQueryHandler now uses the XPath Helper functions defined in XPath.fs
commit a0865e28be35a3011d0b6091819ec32922dd2dd8 <--- changed file should go here
Author: David Klein <>
Date: Tue Apr 27 09:29:53 2010 +0200
Factored out some common XPath Operations
¿Algunas ideas?
Respuestas:
Uso
git rebase
. Específicamente:git stash
para almacenar los cambios que desea agregar.git rebase -i HEAD~10
(o la cantidad de confirmaciones que desee ver).a0865...
) para editar cambiando la palabrapick
al comienzo de la línea enedit
. No elimine las otras líneas ya que eso eliminaría los commits. [^ Vimnote]git stash pop
git add <file>
.git commit --amend --no-edit
.git rebase --continue
que reescriba el resto de tus commits contra el nuevo.[^ vimnote]: si está utilizando
vim
, deberá presionar la Inserttecla para editar y luego Escescribir:wq
para guardar el archivo, salir del editor y aplicar los cambios. Alternativamente, puede configurar un editor git commit fácil de usar congit config --global core.editor "nano"
.fuente
git add
.edit
, NO ELIMINE las otras confirmaciones que figuran en el archivo Si lo hace, las confirmaciones se eliminarán y tendrá que seguir estos pasos para recuperarlas.git add .
Para "arreglar" una confirmación anterior con un pequeño cambio, sin cambiar el mensaje de confirmación de la confirmación anterior, ¿dónde
OLDCOMMIT
está algo así como091b73a
:También puede usar
git commit --squash=OLDCOMMIT
para editar el antiguo mensaje de confirmación durante el rebase.git rebase --interactive
Aparecerá un editor de texto (que se puede configurar ) para confirmar (o editar) la secuencia de instrucciones de rebase . Hay información para cambios de instrucciones de rebase en el archivo; simplemente guarde y salga del editor (:wq
envim
) para continuar con la nueva versión.--autosquash
pondrá automáticamente las--fixup=OLDCOMMIT
confirmaciones en el orden deseado. Tenga en cuenta que--autosquash
solo es válido cuando--interactive
se utiliza la opción.^
inOLDCOMMIT^
significa que es una referencia al commit justo antesOLDCOMMIT
.Los pasos anteriores son buenos para verificar y / o modificar la secuencia de instrucciones de rebase , pero también es posible omitir / automatizar el editor de texto de rebase interactivo mediante:
GIT_SEQUENCE_EDITOR
de un guión .Ver git commit y git rebase . Como siempre, al reescribir el historial de git , solo debe corregir o confirmar los compromisos que aún no ha publicado a nadie más (incluidos los usuarios aleatorios de Internet y los servidores de compilación).
fuente
--autosquash
solo es válido cuando--interactive
se usa la opción .git config --global core.editor "pico"
. Hay varias otras formas de configurar git y / o cambiar el editor predeterminado de su sistema, etc.Con git 1.7, hay una manera muy fácil de usar
git rebase
:organizar sus archivos:
crear un nuevo mensaje de confirmación y reutilizar la confirmación de su confirmación "rota"
anteponer
fixup!
en la línea de asunto (osquash!
si desea editar commit (mensaje)):use
git rebase -i --autosquash
para arreglar su confirmaciónfuente
You asked me to rebase without telling me which branch you want to rebase against, and 'branch.master.merge'
y si luego usogit rebase -i --autosquash
, obtengo unanoop
línea de asunto, volviendo a asignar la confirmación en sí misma. ¿Alguna idea de lo que hago mal?git rebase -i --autosquash HEAD~10
Puede probar una
rebase --interactive
sesión para modificar su confirmación anterior (siempre que no haya enviado esas confirmaciones a otro repositorio).fuente