¿Cambiar la primera confirmación del proyecto con Git? [duplicate]

4 minutos de lectura

¿Cambiar la primera confirmacion del proyecto con Git duplicate
Miguel

Quiero cambiar algo en la primera confirmación de mi proyecto sin perder todas las confirmaciones posteriores. ¿Hay alguna manera de hacer esto?

Accidentalmente enumeré mi correo electrónico sin formato en un comentario dentro del código fuente, y me gustaría cambiarlo ya que recibo spam de los bots que indexan GitHub.

¿Cambiar la primera confirmacion del proyecto con Git duplicate
VonC

Como menciona ecdpalma a continuación, Git 1.7.12+ (agosto de 2012) ha mejorado la opción --root por git rebase:

git rebase [-i] --root $tip” ahora se puede usar para reescribir toda la historia que lleva a “$tip“hasta el compromiso raíz.

Ese nuevo comportamiento fue inicialmente discutido aquí:

Yo personalmente pienso”git rebase -i --root” debe hacerse para que funcione sin requerir “--ontoy te permite “editar” incluso el primero de la historia.
Es comprensible que nadie se molestara, ya que la gente reescribe con mucha menos frecuencia cerca del comienzo de la historia que de otra manera.

los parche seguido.


(respuesta original, febrero de 2010)

Como se menciona en el Preguntas frecuentes sobre Git (y esta pregunta SO), la idea es:

  1. Crear nueva sucursal temporal
  2. Rebobínelo hasta el compromiso que desea cambiar usando git reset --hard
  3. Cambie ese compromiso (sería la parte superior de HEAD actual, y puede modificar el contenido de cualquier archivo)
  4. Rebase la rama encima de la confirmación modificada, usando:

    git rebase --onto <tmp branch> <commit after changed> <branch>`
    

El truco es asegurarse de que la información que desea eliminar no se vuelva a introducir mediante una confirmación posterior en otro lugar de su archivo. Si sospechas eso, entonces tienes que usar filter-branch --tree-filter para asegurarse de que el contenido de ese archivo no contenga en ningún compromiso la información sensible.

En ambos casos, terminas reescribiendo el SHA1 de cada confirmación, así que ten cuidado si ya has publicado la rama cuyos contenidos estás modificando. Probablemente no debería hacerlo a menos que su proyecto aún no sea público y otras personas no hayan basado su trabajo en las confirmaciones que está a punto de reescribir.

  • En OS X Mountain Lion con git 1.7.9.6 instalado en el sistema (Apple Git-31.1) configuré <commit after changed> ser el mismo hachís que usé en el git reset --hard mando. Aparte de ese cambio menor, esto funciona muy bien para actualizar la información del autor en todas las confirmaciones en un repositorio.

    – berto

    30 de diciembre de 2012 a las 1:28


  • ¿Puede proporcionar un ejemplo de lo que debería ser $ propina? git rebase -i --root trabajó para mi.

    – Rémi Benoit

    04/06/2015 a las 17:12


  • @code_dredd Gracias. He restaurado ese enlace.

    – VoC

    16 de noviembre de 2018 a las 19:22

  • @code_dredd Lo siento, modifiqué el enlace incorrecto. He arreglado mi “arreglo” anterior.

    – VoC

    16 de noviembre de 2018 a las 20:13

  • La respuesta y solución más épica. ¡Asombroso!

    – Rambú

    20 de noviembre de 2020 a las 17:47

¿Cambiar la primera confirmacion del proyecto con Git duplicate
ecdpalma

Como se indica en 1.7.12 Notas de la versiónpuedes utilizar

$ git rebase -i --root

¿Cambiar la primera confirmacion del proyecto con Git duplicate
cmcginty

git rebase -i le permite editar convenientemente cualquier confirmación anterior, a excepción de la confirmación de raíz. Los siguientes comandos le muestran cómo hacer esto manualmente.

# tag the old root, "git rev-list ..." will return the hash of first commit
git tag root `git rev-list HEAD | tail -1`

# switch to a new branch pointing at the first commit
git checkout -b new-root root

# make any edits and then commit them with:
git commit --amend

# check out the previous branch (i.e. master)
git checkout @{-1}

# replace old root with amended version
git rebase --onto new-root root

# you might encounter merge conflicts, fix any conflicts and continue with:
# git rebase --continue

# delete the branch "new-root"
git branch -d new-root

# delete the tag "root"
git tag -d root

  • Seguí estas instrucciones como un n00b y funcionaron perfectamente. ¡Gracias! Es posible que desee mencionar agregar -a para git commit --amend o usando git add porque se me olvidó esa primera vez!

    – Nick Craig-Wood

    11 de noviembre de 2012 a las 14:42

  • Esto ya no es cierto, consulte la respuesta aceptada

    –Robin Kanters

    10 mayo 2016 a las 12:41

  • Muchas gracias por tu respuesta. Estoy usando Centos 7 y la versión de git es 1.7.1 con muchas limitaciones en los comandos. La respuesta aceptada no me funcionó y esto cómo funcionó a las mil maravillas para reconstruir el historial del repositorio a partir de Compromiso inicial

    – Marcos Regis

    04/07/2016 a las 21:25


1646959149 303 ¿Cambiar la primera confirmacion del proyecto con Git duplicate
ZelluX

Si desea modificar solo la primera confirmación, puede probar git rebase y modificar la confirmación, que es similar a esta publicación: ¿Cómo modificar una confirmación específica en git?

Y si desea modificar todas las confirmaciones que contienen el correo electrónico sin procesar, filter-branch es la mejor opción. Hay un ejemplo de cómo cambiar la dirección de correo electrónico globalmente en el libro Git profesionaly usted puede encontrar este enlace útil http://git-scm.com/book/en/Git-Tools-Reescritura-Historia

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad