git: cambia una línea en el file para el historial completo

Cuando comencé mi repository git, confié algunos files como compromiso inicial. Ahora, muchos commits más tarde, noté que incluí en esos files una línea con información que no quiero publicar (a diferencia del rest del código). Así que quiero eliminar / cambiar esta línea y save el rest del código.

Buscando alnetworkingedor Encontré esta solución: inserte un compromiso vacío como confirmación inicial (que se describe aquí: inserte un compromiso antes de la confirmación de raíz en Git? ), Haga una rebase en él y luego edite el primer compromiso anterior a través de la enmienda. Desafortunadamente, muchos conflictos de fusión crueles surgen durante la rebase (como se describe aquí: git: resolver conflictos causados ​​por rebase ).

¿Hay alguna forma diferente de resolver mi problema o tienes que volver a clasificar y editar todos los conflictos a mano?

Gracias por adelantado 🙂

TiBo

Aquí hay un command que eliminará una línea ofensiva del historial de un file en todas sus sucursales:

git filter-branch --tree-filter 'sed -i "/sensitive information/ d" filename' -- --all 

Esto verifica todas las revisiones, ejecuta el command sed en él y luego confirma esa revisión.

El command sed en este caso coincide con cualquier línea que contenga la sensitive information al patrón en el file llamado filename y borra esas líneas.

Nota: es bueno si tiene una copy de security, y primero pruebe el script sed para asegurarse de que está haciendo lo que quiere, porque puede llevar bastante time ejecutarlo en un largo historial.

Hice este command que no se equivoca cuando un file no existe:

  filename=./path/to/your/filename filter=your_regex_here git filter-branch --tree-filter 'test -f $filename && sed -i.bak "/$filter/d" $filename || echo “skipping file“' -- --all 

Puedes echar un vistazo a git filter-branch

Los ejemplos en el enlace deberían ayudarte: http://git-scm.com/docs/git-filter-branch