2009-12-30 29 views
9

he creado accidentalmente Las confirmaciones de "desconocido" en mi repositorio, y decidí intentar ejecutar un comando desde here:Git - Duplicar cometer tema

git filter-branch --commit-filter ' 
     if [ "$GIT_COMMITTER_NAME" = "unknown" ]; 
     then 
       GIT_COMMITTER_NAME=".."; 
       GIT_AUTHOR_NAME=".."; 
       GIT_COMMITTER_EMAIL="..."; 
       GIT_AUTHOR_EMAIL="..."; 
       git commit-tree "[email protected]"; 
     else 
       git commit-tree "[email protected]"; 
     fi' HEAD 

Al principio pensé que todo estaba bien, hasta que me di cuenta en gitk que cada commit antes de ejecutar esto fue duplicado, no simplemente editado como originalmente pensé.

¿Es posible limpiar esto?

EDIT: OK, gitk está mostrando tanto los viejos commit (las que tienen los commiters "desconocidos" mezclados) y las nuevas confirmaciones (reescritas los unos), dividido en un cierto momento en torno a mitad de camino. Piense en un montón de commits, luego duplique (y con las ediciones) y apílelo sobre los originales. Lo que quiero hacer es, si es posible, eliminar los originales.

+1

Veamos si obtengo esto: ¿tiene un árbol de confirmación que se parece a '...-- a - b - c - (*) - a '- b' - c '--d - e', donde '(*)' es la confirmación en la que ejecutaste el comando incorrecto, '[abc]'' son confirmaciones erróneamente duplicadas que deseas eliminar, y '[de]' te confirma ¿querer guardar? –

+1

Bueno, es más complicado debido a la bifurcación, pero básicamente como dijiste, pero quiero mantener los '' 'ya que tienen los campos del autor corregidos. – unrelativity

+1

De acuerdo, ¿quiere eliminar [abc], pero mantener [abc] '? –

Respuesta

7

La respuesta fueron los archivos en .git/refs/original, y cómo el comando que encontré no debería haber terminado en HEAD sino en su lugar con --tag-name-filter cat -- --all.

Saludos a _Vi y wereHamster del canal #git por la ayuda.

1

Si conoce la última buena cometió, a salvar su tocino con este:

git reset <last_good_commit> # Warp back to a good state. 
git push -f master    # Push the changes up (you need -f to force it to 
           # obliterate old commits). 

Si quiere hilar más fino (por ejemplo, si hay buenas y malas comete mezclado después de <last_good_commit>), el uso git rebase -i para seleccionar los buenos que deberían quedarse atrás.

+0

No estoy muy familiarizado con la línea de comandos, y no estoy seguro de qué son las selecciones de cerebros o las modificaciones ... también, he agregado una aclaración sobre lo que quiero hacer. – unrelativity

Cuestiones relacionadas