Elimina el historial de un file de una sola twig, no de todo el repository

Tengo una twig de tema (fuera del master ) que tiene muchos cambios. A lo largo de la historia de esta twig de tema, ha habido numerosos cambios en un determinado file. ¿Cómo puedo eliminar todos los cambios en este file a lo largo del historial de mi twig de temas?

Notas adicionales:

  • Tenga en count que el file existía antes de que se creara la twig de tema. No quiero eliminar el file per se.
  • Tengo un par de soluciones, pero hasta ahora parecen tediosas. Los publicaré como respuestas separadas.
  • ¿Puede git filter-branch alguna manera ser utilizado para esto?
  • Mi twig de tema contiene alnetworkingedor … digamos … 60 commits.

Usando git filter-branch :

 $ git checkout topic-branch $ git filter-branch --index-filter 'git checkout master -- myfile' master..HEAD 

Rebase el tree contra el inicio de la twig. Use los attributes para determinar una estrategia de fusión diferente para ese file en particular, en particular 'merge.ours' (siempre guarde nuestro file). Este hilo explica cómo: decirle a git que use nuestra estrategia de fusión en files específicos (la pregunta en sí misma le dice cómo hacerlo, la respuesta es simplemente un error que tuvo el consultante).

No sé qué tan "tedioso" es esto, por ejemplo, si tienes que confirmar algo en cada confirmación, porque no lo he hecho. Pero yo pensaría que no.

Haz una rebase interactiva. La versión tediosa sería simplemente editar / modificar cada confirmación eliminando el cambio:

 git checkout topic-branch git rebase -i master # set all commits to edit # for every commit; do git show --stat # if myfile is not changes: git rebase --continue # copy the commit message git reset HEAD^ git reset myfile git checkout myfile git commit # paste in commit message git rebase --continue # ...until we are done 

La versión ligeramente mejorada es usar git log master.. myfile y solo edita los commits listdos.