Git拒绝重置/放弃文件
我有一个项目,我无法更新某些js文件。 我在本地运行OSX,远程/登台服务器是Linux(CentOS)。
在本地克隆我的项目之后,我注意到我已经modified
所有那些git状态的文件。 我从来没有修改它们,所以我试图discard changes
或reset
它们,但他们再次提出。 修改中的更改是删除所有行并重新添加它们。
我不知道为什么会发生这种情况,或者如何解决这个问题,这样我的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 master
, 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")
解决方法是从.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工作。