Como se ha mencionado por ecdpalmabelow, git 1.7.12+ (agosto de 2012) ha mejorado la opción --root
para git rebase
:
"git rebase [-i] --root $tip
" ahora se puede utilizar para volver a escribir todo el historial que lleva a "$tip
" hasta la confirmación de la raíz.
Ese nuevo comportamiento fue inicialmente discussed here:
Personalmente pienso "git rebase -i --root
" se debe hacer para trabajar solo, sin necesidad de "--onto
" y le permiten "editar", incluso el primero en la historia.
Es comprensible que a nadie le moleste, ya que las personas están reescribiendo con menos frecuencia casi al comienzo de la historia que de lo contrario.
El patch followed.
(respuesta original, febrero de 2010)
Como se mencionó en la Git FAQ (y esto SO question), la idea es:
- Crear nueva rama temporal
- rebobinar a la confirma que quieres cambiar usando
git reset --hard
- Cambia esa confirmación (sería la parte superior de HEAD actual, y puedes modificar el contenido de cualquier archivo)
rama Rebase en la parte superior de cambiado cometer, usando:
git rebase --onto <tmp branch> <commit after changed> <branch>`
El truco es estar seguro de la información que desea eliminar no está siendo presentada de nuevo por una confirmación más tarde en otro lugar en tu archivo. Si sospecha eso, entonces tiene que usar filter-branch --tree-filter
para asegurarse de que el contenido de ese archivo no contenga ninguna información sensible.
En ambos casos, terminas reescribiendo el SHA1 de cada confirmación, así que ten cuidado si ya has publicado la rama que estás modificando.Probablemente no deberías hacerlo a menos que tu proyecto aún no sea público y otras personas no hayan basado el trabajo en las confirmaciones que estás a punto de reescribir.
En OS X Mountain Lion con git 1.7.9.6 instalado el sistema (de Apple Git-31.1) establece que '' para ser el mismo hash que utilicé en el comando 'git reset --hard'. Aparte de ese pequeño cambio, esto funciona maravillosamente para actualizar la información del autor en todas las confirmaciones en un repositorio. –
berto
puede dar un ejemplo de lo que debería ser $ tip. 'git rebase -i --root' funcionó para mí. –
@ RémiBenoit sí, '$ tip' puede ser cualquier confirmación que desee. 'master' (que significa' master HEAD' commit) está bien. – VonC