2010-10-13 17 views
110

frecuentes Voy a tener un flujo de trabajo como los siguientes:Amend una confirmación de que no era la confirmación anterior

  1. confirmó cambios en un grupo de archivos
  2. confirmó cambios en un grupo diferente de archivos
  3. dado cuenta de que echaba de menos algunos cambios que pertenecen a la primera cometer
  4. maldición

no puede hacer uso de git commit --amend porque no es th El compromiso más reciente que necesito cambiar. ¿Cuál es la mejor manera de agregar cambios al primer compromiso sin tocar el segundo?

+1

Consulte también http://stackoverflow.com/questions/3940266/edit-the-commit-message-of-any-commit/3940887#3940887 para obtener una versión con guiones. – VonC

+2

He creado un script Bash para este propósito exacto: https://github.com/colinodell/git-amend-old Una vez instalado, lo usarás así: 'git amend-old abcd123', donde' abcd123 'es el compromiso anterior que desea modificar con sus cambios por etapas. Espero que alguien lo encuentre útil! –

Respuesta

148

Puedes usar git rebase para resolver esto. Ejecute git rebase -i sha1~1 donde sha1 es el hash de confirmación del que desea cambiar. Encuentra el compromiso que deseas cambiar y reemplaza "pick" con "edit" como se describe en los comentarios del editor de rebase. Cuando continúe desde allí, puede editar esa confirmación.

Tenga en cuenta que esto cambiará el sha1 de esa confirmación, así como también todos los elementos secundarios, en otras palabras, esto reescribe el historial desde ese punto en adelante. Puede romper repositorios haciendo esto, pero si no ha empujado, no es tan importante.

+26

@rspeicher: en lugar de 'sha1', también puede verificar 'HEAD ~ N', donde N es el número de confirmaciones antes de 'HEAD', donde desea comenzar su rebase. – 3lectrologos

+0

Eso parece. ¡Gracias! –

+0

@ 3lectrologos o cualquier otra forma de referirse a una confirmación: – MatrixFrog

Cuestiones relacionadas