2012-02-11 8 views
16

He estado buscando en Google y leer varios mensajes por la red y he intentado:Cómo eliminar un archivo permanentemente en Git sin obtener "ADVERTENCIA: Ref 'refs/heads/master' no ha cambiado"?

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch Launcher\lib" --prune-empty -- --all

y

git filter-branch --tree-filter "rm -rf Launcher\lib" --prune-empty -- --all

Todo lo que resulta en una:

ADVERTENCIA : Ref 'refs/heads/master' no ha cambiado

También hay otros clones de este repositorio y un servidor central. Presionaré los cambios en el servidor, según tengo entendido, ¿otros con clones solo necesitan recuperar y rebase (no combinar)? ¿Seguiría funcionando si hubieran hecho cambios?

+0

¿Cambió algo después de la rama de filtro? – Andy

+0

No, el sistema de archivos es el mismo y veo los archivos en el historial. – Tower

+0

¿Hay alguna diferencia entre las versiones 'index-filter' y' tree-filter' del comando, aparte de la velocidad, en términos de historial de repos final? Además, ¿qué hacen los '-', '--all' y' --prune-empty'? –

Respuesta

21

Bien, resolví el problema, era el camino equivocado. He cambiado esto:

Launcher\lib

a esto:

Launcher/lib/

y ahora funciona;)

+1

+1 Gracias ... Estaba a punto de hacerme una cirugía en refs/* –

+0

Del mismo modo, si ha movido el archivo con 'git mv', los commits antiguos todavía hacen referencia a la ubicación anterior, por lo que debe' rm' que , no la nueva ubicación (o ejecutarlo con ambos). –

7

Voy a poner esto aquí como referencia en el futuro, ya que tenía la mismo problema: Si usa cmder (u otros sabores ConEmu), use comillas dobles en lugar de comillas simples.

también envolver la vía entre comillas si tiene algún espacio en blanco en su dirección:

git filter-branch --force --index-filter \ 
"git rm --cached --ignore-unmatch 'server/bin/some file.txt'" \ 
--prune-empty --tag-name-filter cat -- --all 

Ese era el problema cuando llegué a ese error.

Cuestiones relacionadas