2011-08-28 14 views
7

Recientemente abrí un repositorio en GitHub. Soy nuevo en Git. Como es habitual con los recién llegados, me comprometí a utilizar el nombre y el correo electrónico predeterminados, que, según la mejor tradición novata, descubrí cinco confirmaciones demasiado tarde. Ahora comienza la diversión, porque comencé a buscar información sobre cómo cambiar el autor & nombre de committer de estas confirmaciones. Multa. Básicamente me encontré con la siguiente información y una gran cantidad de copias:Cambiar el nombre del autor de las confirmaciones anteriores: se rechazan las solicitudes de avance rápido

  1. http://help.github.com/change-author-info/

  2. Delete commits from a branch in Git

  3. How to remove selected commit log entries from a Git repository while keeping their changes?

  4. Change the author and committer name and e-mail of multiple commits in Git

  5. Change commit author at one specific commit

  6. Change first commit of project with Git?

  7. Could I change my name and surname in all previous commits?

El problema no parece ser poco común. Solo puedo decir que ninguna de las soluciones funcionó. La mitad de ellos son variaciones del mismo script git filter-branch -f --env-filter. Traté de trabajar en ese script varias veces. El problema es que después de aplicar el script, no puedo presionar. "Empujes rápidos rechazados" o algo así. Bien, la única forma de continuar es tirar. Después de tirar, toda la información anterior está allí de nuevo + una nueva rama con la nueva información. Ya estoy aquí sentado con cuatro ramas, fusionadas de la manera más atroz, todas contienen la misma información con diferentes nombres de autor, incluido el que quería eliminar.

OK, para abreviar, también traté de eliminar compromisos seleccionados, lo que genera conflictos espeluznantes que no puedo resolver (¿cómo ???), y aplastar algunos de los commits en los más nuevos con el correcto información del autor, lo que resulta en el estado del proyecto actual que está naufragando. Incluso mejor, me sale un error de segmentación a veces después de ejecutar git rebase -i, lo que me informan aquí: http://lists-archives.org/git/729800-rebase-i-segmentation-fault-and-another-problem.html es completamente lógico. Lo único que (afortunadamente) funciona es git rebase --abort, lo que me salvó el culo varias veces.

Espero que mi frustración no se vea afectada, sino que te divierta y te estimule para que me ayudes. Me gustaría:

  • Para eliminar dicho autor, finalmente, información

  • Bonus: Para deshacerse de todas las ramas que contienen la misma información.

Pero sería feliz con el primero también, si el obstáculo de la eliminación de las ramas anteriores sin destrozar el estado actual es demasiado para un recién llegado git. Gracias por adelantado.

+0

duplicados de [¿Qué es un "avance rápido" en Git? ] (http://stackoverflow.com/questions/4684352/whats-a-fast-forward-in-git) –

+0

¿Cómo es eso un duplicado? El hecho de que la respuesta a la pregunta esté relacionada de alguna manera no significa que la pregunta sea la misma, sino que tenga una redacción diferente. – Hinton

+0

Considero que es un duplicado. No solo las soluciones son esencialmente idénticas, es decir, empuje forzado, sino que parece haber sido su único problema, después de reescribir con éxito su historial. Si alguien no está de acuerdo, no puede volver a abrir su pregunta. –

Respuesta

5

El problema es que después de aplicar el script, no puedo presionar. "Empujes rápidos rechazados" o algo así.

Este problema no se puede evitar si está intentando modificar el historial.Git rechaza la oferta porque hace que se pierdan datos; en este caso, esos datos son los autores antiguos. Solo necesita git push con la bandera --force para decirle que está seguro de lo que está haciendo.

Engañar a Git puede ser difícil de resolver. Si master es un desastre, normalmente vuelvo a recorrer el historial con git checkout HEAD~ hasta que regrese a un tiempo en el que las cosas no eran terribles. Luego, git branch --force master para reiniciar master hasta ese punto. Finalmente elimino todas las ramas desordenadas con git branch -D badBranch.

Ten cuidado.

+0

OK - eso funcionó en la medida en que finalmente eliminó el nombre del autor. ¿Quizás también tengas una pista sobre cómo eliminar todas estas ramas que accidentalmente he creado? – Hinton

+0

Además, asegúrese de decirle a todos que necesitan "volver a buscar" el repositorio. – Andy

+0

@Andi es un repositorio "cuasi-privado" (lo que significa que soy el único committer ^^) ... de todos modos no lo habría hecho en otro caso. – Hinton

1

Si aún nadie está siguiendo su repositorio, simplemente modifique su repositorio local y fuerce el envío a GitHub. Acepta cualquier turbación He estado (re) construyendo un repositorio durante semanas en una línea similar.

es más complicado si se trata de un proyecto de los estudiantes y el profesor ya ha tirado - sólo para que se aprecie el valor del buen administrador ;-)

Cuestiones relacionadas