I have a project with certain js files which I cannot update. I run OSX locally and my remote/staging server is Linux (CentOS).
Right after cloning my project locally, i noticed I have all those files with git status modified
. I never modified them, so I tried to discard changes
or reset
them, but they come up again. The change that is in the modification is deleting all lines and adding them again.
I'm not sure why this happens or how to fix it so that my git status is clean as it needs to be.
Here is a few lines from the git status:
# 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
UPDATE 1:
I have now managed to commit the above files, but the staging server is locked because it won't pull new edits:
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
I can't commit/push because:
Updates were rejected because a pushed branch tip is behind its remote counterpart
I tried:
git reset --hard
and
git stash
git stash drop
But they don't work, nothing happens.
UPDATE 2:
git diff
gives me:
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.
...
This issue repeatedly popped up with the Roll20 character sheets repository on an Ubuntu machine and I could solve it by
But, this stopped resolving the issue completely today and by looking around Stack Overflow I found the culprit to be their
.gitattributes
file:After
git pull origin master
,git status
returned:The solution was to remove the
* text=auto
line from the .gitattributes:The changes on
.gitattributes
can be discarded and Git will still be satisfied.Edit +1d: Retried the .gitattributes "trick" today, but did not
git status
before discarding the .gitattributes changes. For no reason obvious to me (maybe caching ofgit status
?), agit status
afterwards returned this again:Doing it again, but with
git status
inbetween worked.I always mentioned making sure that your
core.autocrlf
is set tofalse
, as in "Git : stuck repo using stash after crlf normalization?"Also make sure that you don't have a
.gitattributes
file witheol
directives that would try to convert the end-of-lines.The basic idea is: do you still see that error message when you make sure there is no automatic conversion of any sort?
But just in case, consider also "Git rebase fails, 'Your local changes to the following files would be overwritten by merge'. No local changes?"
I just spent 2 hours (!) on the same issue with a .svg file (Scalar Vector Graphics), which kept changing after 'revert' without my intervention.
So the file shows up as modified in 'git status'; reverting it succeeds, but it keeps changing, so the 'pull' is failing again and again.... so annoying!
No luck with 'git reset', 'git ignore', 'git untrack' etc...
Finally, I solved it by removing the file from my local system (not 'git delete', just Shift + Delete) >> now 'pull' request passes, and the file is fetched from the remote repository.
So easy, I could cry!
Normalize line endings
This is because the newlines are being changed between the committed files and the files on disk.
Github has a handy page detailing how to deal with this kind of problem, in brief (for linux/OSX), step one is to change your git config so it sorts out the line endings for you:
Then commit line-endings normalization:
And then, line endings should be handled correctly. See the help page on github for more information, or the relevant section of the git docs formatting and whitespace.
Resolving linux-machine conflicts
The error message reads "Your local changes to the following files would be overwritten by merge:", that means they contain local changes which should either be committed or discarded before continuing. Assuming normal usage for the staging server (it doesn't have any intentional changes) the local changes can be discarded. For example do the following:
This will retrieve the repository history, without updating the working copy, and then update to exactly match the master branch in the repository. Note that the last command will discard all uncommitted changes.