Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

    
            
  •              Editar la raíz cometen en Git?                                      5 respuestas                          
  •     
    

Quiero cambiar algo en el primer compromiso de mi proyecto con a perder todos los envíos posteriores. ¿Hay alguna manera de hacer esto?

Por error, he enumerado mi correo electrónico prima en un comentario dentro del código fuente, y me gustaría cambiarlo como estoy recibir correo basura contra los robots de indexación de GitHub.

¿Fue útil?

Solución

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

"git rebase [-i] --root $tip" ahora se puede utilizar para volver a escribir toda la historia que lleva a "$tip" hasta la raíz comprometerse.

Ese nuevo comportamiento fue inicialmente discutido aquí :

  

Yo personalmente pienso "git rebase -i --root" debe ser hecho para trabajar solo, sin necesidad de "--onto" y le permiten "editar", incluso el primero en la historia.
  Es comprensible que nadie se molestó, ya que las personas son mucho menos a menudo volver a escribir cerca del comienzo de la historia de otra manera.

El parche seguido .


(respuesta original, febrero de 2010)

Como se mencionó en la Git FAQ (y esto Así que la pregunta ), la idea es:

  1. Crear nueva rama temporal
  2. Rewind a la confirmación que desea cambiar usando git reset --hard
  3. Cambio que comprometerse (sería superior de la cabeza corriente, y se puede modificar el contenido de cualquier archivo)
  4. Rebase rama en la parte superior de cambiado cometer, usando:

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

El truco es estar seguro de la información que desea eliminar no está siendo presentada de nuevo por una tarde cometer otra parte de su archivo. Si sospecha que, a continuación, usted tiene que utilizar filter-branch --tree-filter para asegurarse de que el contenido de ese archivo no contiene ningún compromiso en la información sensible.

En ambos casos, se termina la reescritura de la SHA1 de cada comprometerse, así que ten cuidado si ya ha publicado la rama que va a modificar el contenido del. Es probable que no debe hacerlo a menos que el proyecto aún no es pública y otras personas no han basado en el trabajo fuera de las confirmaciones que está a punto de volver a escribir.

Otros consejos

Como se indica en Notas de la versión 1.7.12 , es posible utilizar

$ git rebase -i --root

git rebase -i le permite editar convenientemente ningún commit anteriores, a excepción de la raíz cometer . Los comandos siguientes 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

Si desea modificar sólo la primera de comprometerse, puede intentar modificar git rebase y la confirmación, que es similar a este post: Cómo modificar un determinado comprometerse en git?

Y si desea modificar todas las confirmaciones de correo electrónico que contienen la prima, filter-branch es la mejor opción. No es un ejemplo de cómo cambiar la dirección de correo electrónico en todo el mundo en el libro Pro Git , y usted puede encontrar útil este enlace http://git-scm.com/book/en/Git-Tools-Rewriting-History

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top