cambiar el contenido de un file en confirmaciones anteriores a datos actuales

Tengo ~ 50 commits en mi repository local de Git. Realicé algunos cambios en un file en particular en el HEAD actual, y me gustaría actualizar esos cambios de files a todos los commits anteriores. ¿Es posible lograr esto en git?

ACTUALIZACIÓN : aunque el command en mi respuesta original funciona, en la reflexión puede que no sea el mejor para usar en un filter de índice; agregué algunos comentarios sobre esto


Es posible, pero hay un costo.

Lo que está describiendo es una "reescritura de historial", que cambiará la identificación de confirmación de cada confirmación. Si solo utiliza este repository, y no ha estado utilizando los valores de ID de confirmación (SHA) para nada (como la documentation, o lo que sea), entonces eso probablemente sea correcto.

Si otros también usan el repository (o si tiene varios clones), tendrá que coordinar un corte. Básicamente mi consejo sería organizar un momento en que todas las actualizaciones se hayan enviado a un repository común (probablemente origen), luego descartar todos los clones, luego reescribir y replace el origen, luego volver a clonar. Técnicamente, no tienes que hacerlo de esa manera, pero mira "recuperarse desde el rebase ascendente" en la documentation de git rebase (que en realidad se aplica a cualquier reescritura del historial).

Entonces, si decides continuar con la reescritura, la forma más simple es probablemente usar git filter-branch . (Si ciertas suposiciones acerca de su repos son ciertas, entonces un rebase basado en rebase podría funcionar, pero filter-branch es más aplicable en general).

 git filter-branch --index-filter 'git reset master -- file/to/be/rewritten' -- --all 

Esto crea algunos refs de "copy de security" que deseará eliminar una vez que haya validado el resultado.

Tenga en count que originalmente sugerí

 git filter-branch --index-filter 'git checkout master -- file/to/be/rewritten' -- --all 

que también parece funcionar; pero el command de reset está más puramente relacionado con la actualización del índice, por lo que puede ser una mejor opción aquí.