Git se niega a restablecer / descartar files

Tengo un proyecto con ciertos files js que no puedo actualizar. Ejecuto OSX localmente y mi server remoto / provisional es Linux (CentOS).

Inmediatamente después de clonar mi proyecto localmente, noté que tenía todos esos files con estado de git modified . Nunca los modifiqué, así que traté de discard changes o reset , pero vuelven a aparecer. El cambio que está en la modificación es eliminar todas las líneas y agregarlas nuevamente.

No estoy seguro de por qué sucede esto o cómo solucionarlo para que mi estado de git esté limpio como debe ser.

Aquí hay algunas líneas del estado de git:

 # modified: app/webroot/js/ckeditor/plugins/devtools/lang/el.js # modified: app/webroot/js/ckeditor/plugins/devtools/lang/fa.js # modified: app/webroot/js/ckeditor/plugins/devtools/lang/gu.js 

ACTUALIZACIÓN 1:

Ahora he logrado comprometer los files anteriores, pero el server provisional está bloqueado porque no extraerá nuevas ediciones:

 error: Your local changes to the following files would be overwritten by merge: app/webroot/js/ckeditor/_source/lang/ar.js app/webroot/js/ckeditor/_source/lang/bg.js app/webroot/js/ckeditor/_source/lang/bn.js app/webroot/js/ckeditor/_source/lang/cs.js ... Aborting 

No puedo comprometer / presionar porque:

 Updates were rejected because a pushed branch tip is behind its remote counterpart 

Lo intenté:

 git reset --hard 

y

 git stash git stash drop 

Pero no funcionan, no pasa nada.

ACTUALIZACIÓN 2:

git diff me da:

 The file will have its original line endings in your working directory. warning: CRLF will be replaced by LF in app/webroot/js/ckeditor/_source/lang/fa.js. The file will have its original line endings in your working directory. warning: CRLF will be replaced by LF in app/webroot/js/ckeditor/_source/lang/gu.js. The file will have its original line endings in your working directory. ... 

Normalizar terminaciones de línea

El cambio que está en la modificación es eliminar todas las líneas y agregarlas nuevamente.

Esto se debe a que las líneas nuevas se cambian entre los files confirmados y los files en el disco.

Github tiene una página útil que detalla cómo lidiar con este tipo de problema, en resumen (para Linux / OSX), el primer paso es cambiar su configuration de git para que clasifique los finales de línea para usted:

 git config --global core.autocrlf input 

Luego, comprometa la normalización de los finales de línea:

 git rm --cached -r . # Remove everything from the index. git reset --hard # Write both the index and working directory from git's database. git add . # Prepare to make a commit by staging all the files that will get normalized. # This is your chance to inspect which files were never normalized. You should # get lots of messages like: "warning: CRLF will be replaced by LF in file." git commit -m "Normalize line endings" # Commit 

Y luego, las terminaciones de línea deben manejarse correctamente. Consulte la página de ayuda en github para get más información, o la sección relevante del formatting de docs de git y el espacio en blanco .

Resolviendo conflictos de linux-machine

el server de transferencia está bloqueado porque no generará nuevas ediciones.

El post de error dice "Tus cambios locales a los siguientes files se sobrescribirán con merge:", eso significa que contienen cambios locales que deben confirmarse o descartarse antes de continuar. Suponiendo un uso normal para el server de transición (no tiene ningún cambio intencional), los cambios locales pueden descartarse. Por ejemplo, haz lo siguiente:

 $ git fetch origin # Retrieve updates $ git reset --hard origin/master # Forcibly change the current branch to match origin/master 

Esto recuperará el historial del repository, sin actualizar la copy de trabajo, y luego se actualizará para coincidir exactamente con la twig maestra en el repository. Tenga en count que el último command descartará todos los cambios no confirmados.

Siempre mencioné que tu core.autocrlf esté configurado en false , como en " Git: repo pegado usando stash después de la normalización de crlf ".

 git config --global core.autocrlf false 

También asegúrese de que no tenga un file .gitattributes con directivas eol que intenten convertir el final de las líneas.
La idea básica es: ¿todavía ves ese post de error cuando te aseguras de que no haya ninguna conversión automática de ningún tipo?


Pero por si acaso, considere también " Git rebase failed, 'Sus cambios locales a los siguientes files se sobrescribirán mediante fusión'. ¿No hay cambios locales? "

Estoy en un Mac, y este oscuro cambio de configuration pareció arreglar todos mis problemas con respecto a los cambios no registrados cuando no había ninguno.

 git config --global core.trustctime false 

Acabo de pasar 2 horas (!) Sobre el mismo problema con un file .svg (Scalar Vector Graphics), que siguió cambiando después de 'revertir' sin mi intervención.

Entonces el file aparece como modificado en 'estado de git' ; revertirlo tiene éxito, pero sigue cambiando, por lo que el 'tirón' está fallando una y otra vez … ¡tan molesto!

Sin suerte con 'git reset' , 'git ignore' , 'git untrack', etc.

Finalmente, lo resolví quitando el file de mi sistema local (no 'git delete' , simplemente Shift + Delete) >> ahora 'pull' solicita pases, y el file se obtiene del repository remoto.

¡Tan fácil, podría llorar!

Este problema apareció repetidamente con el repository de hojas de caracteres Roll20 en una máquina Ubuntu y pude resolverlo

 #!/bin/sh # Use in root dir of git repository # Fixes some newline-related weirdness git rm --cached -r . git reset --hard 

Pero, esto dejó de resolver el problema completamente hoy y al mirar alnetworkingedor de Stack Overflow encontré al culpable como su file .gitattributes :

 # Auto detect text files and perform LF normalization * text=auto 

Después del git pull origin master , se devuelve el git status :

 On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: Star Wars Revised RPG/SWRRPG-updated.html no changes added to commit (use "git add" and/or "git commit -a") 

La solución fue eliminar la línea * text=auto de .gitattributes:

 $ git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: .gitattributes no changes added to commit (use "git add" and/or "git commit -a") 

Los cambios en .gitattributes se pueden descartar y Git seguirá .gitattributes .

Editar + 1d : ha vuelto a intentar el "truco" de .gitattributes hoy, pero no git status antes de descartar los cambios de .gitattributes. Sin ninguna razón obvia para mí (¿tal vez el almacenamiento en caching del git status de git status ?), Un git status luego devolvió esto de nuevo:

 On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: Star Wars Revised RPG/SWRRPG-updated.html no changes added to commit (use "git add" and/or "git commit -a") 

Hacerlo de nuevo, pero con el git status entremedio trabajado.