2012-04-12 16 views
9

Apreté una confirmación a un repositorio donde accidentalmente agregué un archivo. Nadie más se ha fusionado del repositorio remoto para que pueda reescribir la historia. Pero cuando elimino el archivo (unstage, no lo eliminé del control de fuente, o disco) de la confirmación local, no puedo enviar cambios. git push muestra Todo hasta al díaEliminar archivo de la confirmación modificada

Respuesta

3

Mientras que hice algo similar a lo que han sugerido Colin y ydroneaud,

La respuesta fue usar

git push +sa1:sa1 

donde sa1 es mi sucursal. Esto obliga a empujar incluso "nada".

4

Probar:

git rm --cached <yourfile> 
git commit --amend 
git push -f 
+0

No quiero eliminar el archivo del seguimiento, solo de la confirmación. – sa1

+0

@ sa1 no existe el concepto de seguimiento en git, su archivo está o no en su última confirmación, eso es todo. La otra opción es simplemente dejar el archivo allí, pero sin contenido ni parte eliminada. Git es solo un "rastreador de contenido estúpido" hecho por un "chico del sistema de archivos". ;) – KurzedMetal

+0

@KurzedMetal Existe un concepto de archivos rastreados. Lo que hace aquí es eliminar el archivo de los archivos rastreados, lo que quiere hacer es eliminar los cambios realizados en un archivo en una confirmación. –

5

Si necesita volver a escribir la confirmación completa, trate de usar

git reset HEAD^ 
git add <files to be part of the commit> 
# or git add -pu 
git commit -C <previous commit number> 

Antes de hacer esto se necesita para mantener el último número de confirmación para poder reutilizar el mensaje/fecha/autor de confirmación.

+0

Hice algo similar. El problema fue que no pude enviar esos cambios al repositorio remoto. – sa1

9

Aquí van:

git checkout HEAD~ -- path/to/your/file 
git add path/to/your/file 
git commit --amend -C HEAD 

git diff -p HEAD~ -- path/to/your/file | git apply -R 
git commit --amend -C HEAD 

git reset HEAD~ -- path/to/your/file 
git commit --amend -C HEAD 
+0

Hice esto. El problema fue que los cambios no se llevaron al repositorio remoto. – sa1

+0

Tienes que 'push -f' ellos. –

+0

push --force fue una de las cosas que había intentado. – sa1

Cuestiones relacionadas