pushed not changes git github revert

not - Git: ¿Cómo revertir 2 archivos obstinados en "Modificado pero no confirmado"?



revert git checkout (9)

¿Cuáles son los finales de línea en los archivos? Apuesto a que son CRLF. Si lo son, consulte esta guía: http://help.github.com/line-endings/

En resumen, debe asegurarse de que git esté configurado para convertir los finales de línea a LF en la confirmación, y luego confirmar esos archivos. Los archivos en el repositorio siempre deben ser LF, los archivos retirados deben ser nativos del sistema operativo, suponiendo que configure git correctamente.

Tengo un repositorio que tiene dos archivos que supuestamente cambié localmente.

Así que estoy atascado con esto:

$ git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: dir1/foo.aspx # modified: dir2/foo.aspx # no changes added to commit (use "git add" and/or "git commit -a")

Doing git diff dice que todo el contenido del archivo ha cambiado, aunque al mirarlo parece no ser cierto (parece que hay rangos de línea comunes que diff parece no ver).

Curiosamente, no recuerdo haber cambiado estos archivos localmente. Este repositorio se utiliza con un repositorio remoto (privado, en GitHub.com, FWIW).

No importa lo que haya intentado, no puedo descartar estos cambios locales. He intentado todo:

$ git checkout -- . $ git checkout -f $ git checkout -- dir1/checkout_receipt.aspx $ git reset --hard HEAD $ git stash save --keep-index && git stash drop $ git checkout-index -a -f

En otras palabras, intenté todo lo que se describe en ¿Cómo descarto los cambios no realizados en Git? y mucho más. Pero los 2 archivos permanecen bloqueados como "cambiados pero no confirmados".

¿Qué demonios causaría que dos archivos se bloquearan así y aparentemente "revertir-tabla"?

PD En la lista de arriba, que mostraba comandos que ya había probado, escribí erróneamente git revert cuando quise decir git checkout . Lo siento y gracias a aquellos de ustedes que respondieron que debería intentar checkout . Edité la pregunta para corregirla. Definitivamente ya intenté checkout .


Creo que sería útil proporcionar una pista sobre cómo reproducir el problema , para comprender mejor el problema:

$ git init $ echo "*.txt -text" > .gitattributes $ echo -e "hello/r/nworld" > 1.txt $ git add 1.txt $ git commit -m "committed as binary" $ echo "*.txt text" > .gitattributes $ echo "change.." >> 1.txt # Ok let''s revert now $ git checkout -- 1.txt $ git status modified: 1.txt # Oooops, it didn''t revert!! # hm let''s diff: $ git diff warning: CRLF will be replaced by LF in 1.txt. The file will have its original line endings in your working directory. diff --git a/1.txt b/1.txt index c78c505..94954ab 100644 --- a/1.txt +++ b/1.txt @@ -1,2 +1,2 @@ -hello +hello world # No actual changes. Ahh, let''s change the line endings... $ file 1.txt 1.txt: ASCII text, with CRLF line terminators $ dos2unix 1.txt dos2unix: converting file 1.txt to Unix format ... $ git diff git diff 1.txt diff --git a/1.txt b/1.txt index c78c505..94954ab 100644 --- a/1.txt +++ b/1.txt @@ -1,2 +1,2 @@ -hello +hello world # No, it didn''t work, file is still considered modified. # Let''s try to revert for once more: $ git checkout -- 1.txt $ git status modified: 1.txt # Nothing. Let''s use a magic command that prints wrongly committed files. $ git grep -I --files-with-matches --perl-regexp ''/r'' HEAD HEAD:1.txt

Segunda forma de reproducir: En el script anterior, reemplaza esta línea:
echo "*.txt -text" > .gitattributes
con
git config core.autocrlf=false
y mantener el resto de las líneas como está

¿Qué dice todo lo anterior? Un archivo de texto puede (en algunas circunstancias) comprometerse con CRLF, (por ejemplo, -text en .gitattributes / o core.autocrlf=false ).

Cuando más adelante deseemos tratar el mismo archivo como texto ( -text -> text ), tendrá que volverse a comprometer.
Por supuesto, puedes revertirlo temporalmente (como ha respondido correctamente ). En nuestro caso:

echo "*.txt -text" > .gitattributes git checkout -- 1.txt echo "*.txt text" > .gitattributes

La respuesta es : ¿realmente quieres hacer eso, porque va a causar el mismo problema cada vez que cambies el archivo?

Para el registro:

Para verificar qué archivos pueden causar este problema en su repositorio, ejecute el siguiente comando (se debe compilar git con --with-libpcre):

git grep -I --files-with-matches --perl-regexp ''/r'' HEAD

Al confirmar los archivos (suponiendo que desea tratarlos como texto), es lo mismo que hacer lo que se propone en este enlace http://help.github.com/line-endings/ para solucionar estos problemas. . Pero, en lugar de eliminar .git/index y realizar el reset , simplemente cambie el / los archivo / s, luego ejecute git checkout -- xyz zyf y luego git checkout -- xyz zyf .


Intenta revertir los cambios locales :

git checkout -- dir1/foo.aspx git checkout -- dir2/foo.aspx


Otra posibilidad es que la diferencia (que le impide revertir estos archivos con un comando de finalización de compra) es una de modo de archivo. Esto es lo que me pasó a mí. En mi versión de git puedes descubrir esto usando

git diff dir1 / foo.aspx

Y le mostrará los cambios del modo de archivo. Sin embargo, todavía no te permitirá revertirlos. Para ese uso, ya sea

git config core.filemode false

o cambia tu git .config en tu editor de texto agregando

[núcleo]

filemode = false

Después de hacer esto, puede usar

git reset HEAD dir1 / foo.aspx

y el archivo debería desaparecer

(Recibí todo esto de la respuesta a ¿Cómo hago para que git ignore los cambios de modo (chmod)? )


Para mí, el problema no era sobre los finales de línea. Se trataba de cambiar el caso en el nombre de la carpeta (Reset_password -> Reset_Password). Esta solución me ayudó: https://.com/a/34919019/1328513


Pasé horas intentando resolver un problema similar: una rama remota que había revisado, que mostraba obstinadamente cuatro archivos como ''Modificados pero no actualizados'', incluso cuando borraba todos los archivos y ejecutaba git checkout -f nuevamente (u otras variaciones de este enviar)!

Estos cuatro archivos eran necesarios, pero ciertamente no habían sido modificados por mí. Mi solución final: persuadir a Git de que no se han cambiado. Lo siguiente funciona para todos los archivos desprotegidos, mostrando el estado "modificado": ¡asegúrese de que ya ha confirmado / guardado alguno que realmente se ha modificado !:

git ls-files -m | xargs -i git update-index --assume-unchanged "{}"

En Mac OSX, sin embargo xargs funciona un poco diferente (gracias a Daniel por el comentario):

git ls-files -m | xargs -I {} git update-index --assume-unchanged {}

He agregado esto como un marcador de posición para mí la próxima vez, pero espero que también ayude a alguien más.

-Alabama


Tenía algunos archivos fantasma cambiados que se mostraban como modificados, pero en realidad eran idénticos.

Ejecutar este comando a veces funciona:
(Desactiva las conversiones de final de línea "inteligentes" pero a menudo inútiles de git)

git config --local core.autocrlf false

Pero en otro caso encontré que se debía a un archivo .gitattributes en la raíz que tenía algunas configuraciones de fin de línea, que intentaba aplicar autocrlf para ciertos archivos incluso cuando estaba apagado. Eso no fue realmente útil, así que .gitattributes , .gitattributes y el archivo ya no se muestra como modificado.


así es como resolví el mismo problema en mi caso: abrir cambios en .gitattributes:

* text=auto

a:

#* text=auto

guardar y cerrar, luego revertir o restablecer, gracias a @Simon East por la pista


git checkout dir1/foo.aspx git checkout dir2/foo.aspx