Git拒绝重置/放弃文件

我有一个项目,我无法更新某些js文件。 我在本地运行OSX,远程/登台服务器是Linux(CentOS)。

在本地克隆我的项目之后,我注意到我已经modified所有那些git状态的文件。 我从来没有修改它们,所以我试图discard changesreset它们,但他们再次提出。 修改中的更改是删除所有行并重新添加它们。

我不知道为什么会发生这种情况,或者如何解决这个问题,这样我的git状态就可以干净了。

这是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 

更新1:

我现在已经设法提交上述文件,但是登台服务器被locking,因为它不会提取新的编辑:

 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 

我不能提交/推送,因为:

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

我试过了:

 git reset --hard 

 git stash git stash drop 

但他们不工作,没有任何反应。

更新2:

git diff给我:

 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. ... 

规范行结束

修改中的更改是删除所有行并重新添加它们。

这是因为换行符在提交的文件和磁盘上的文件之间发生了变化。

Github有一个方便的页面,详细说明如何处理这种问题,简而言之(对于linux / OSX),第一步是改变你的gitconfiguration,以便为你sorting行结尾:

 git config --global core.autocrlf input 

然后提交行结束标准化:

 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 

然后,行结尾应该正确处理。 有关更多信息,请参阅github上的帮助页面,或者查看git文档格式和空白的相关部分。

解决linux-machine冲突

登台服务器被locking,因为它不会拉动新的编辑。

错误消息为“您的本地对下列文件的更改将被merge:”覆盖,这意味着它们包含本地更改,应该在继续之前提交或丢弃。 假定登台服务器的正常使用(没有任何有意的改变),本地更改可以被丢弃。 例如,执行以下操作:

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

这将检索版本库历史logging,而不更新工作副本,然后更新为与存储库中的主分支完全匹配。 请注意,最后一个命令将放弃所有未提交的更改。

我一直提到要确保你的core.autocrlf设置为false ,如“ Git:在crlf归一化后使用 core.autocrlf 粘贴回购?

 git config --global core.autocrlf false 

还要确保你没有一个带有eol指令的.gitattributes文件,它会尝试转换行尾。
基本思想是:当你确定没有任何types的自动转换时,你还能看到错误信息吗?


但是,以防万一,也考虑“ Git rebase失败,”您的本地更改到下列文件将被合并覆盖“。没有本地更改?

我在一个mac上,这个晦涩的configuration更改似乎解决了所有我的困境,当没有任何暂时的变化。

 git config --global core.trustctime false 

我只花了2个小时(!)在一个.svg文件(标量vectorgraphics),同样的问题,不断的改变'恢复'没有我的干预。

所以文件显示为在'git状态'中修改; 恢复成功,但它不断变化,所以'拉'一次又一次地失败….这么烦人!

没有运气与“混帐重置”“混帐忽略”“混帐未find”等…

最后,我通过从本地系统中删除文件解决了这个问题(不是'git delete' ,只是Shift + Delete)>>现在'pull'请求传递,并且从远程仓库获取文件。

太容易了,我可以哭!

这个问题反复出现在Ubuntu机器上的Roll20字符表库,我可以通过

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

但是,这停止了今天彻底解决这个问题,并通过环顾堆栈溢出我发现罪魁祸首是他们的.gitattributes文件:

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

git pull origin mastergit 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") 

解决方法是从.gitattributes中删除* text=auto行:

 $ 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") 

.gitattributes上的变化可以被丢弃,Git仍然会被满足。

编辑+ 1d :今天重做了.gitattributes的“技巧”,但在放弃.gitattributes更改之前没有进行git status 。 对于我来说没有任何理由(也许cachinggit status ?),之后的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") 

再次这样做,但与git status inbetween工作。