ver tipos tag modificados log etiquetas crear archivos git commit amend

tipos - git: cambia una línea en el archivo para el historial completo



git ver archivos modificados (4)

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

Buscando alrededor 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 :)


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

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

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

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

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


Hice este comando que no se equivoca cuando un archivo 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


Mi respuesta combina lo mejor de todo. Sustituye la cadena de filtro dada en lugar de la línea completa y se salta muy bien si el archivo no se encuentra en una confirmación. Hay muchas citas escapadas, pero la otra respuesta tenía citas realmente extrañas que no me funcionaron.

git filter-branch --tree-filter "test -f /"$filename/" && sed -i /"s/$filter//g/" /"$filename/" || echo /"skipping $filename/"" -- --all