Git:如何还原两个顽固地停留在“已更改但未提交”的文件?
|
我有一个回购,其中有两个文件,据说我是在本地更改的。
因此,我坚持以下做法:
$ 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\")
执行git diff
表示整个文件内容都发生了变化,即使从眼球看来似乎是不正确的(似乎diff似乎看不到常见的行范围)。
有趣的是,我不记得在本地更改这些文件。该仓库与一个远程仓库(私有,在GitHub.com,FWIW)一起使用。
无论我尝试了什么,我都不能放弃这些本地更改。我已经尝试了所有:
$ 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
换句话说,我已经尝试了如何丢弃Git中未分级的更改中描述的所有内容。还有更多。但是,这两个文件仍然停留为“已更改但未提交”。
到底是什么原因导致两个文件像这样被卡住,看似“ un-revert-table”?
附言在上面显示了我已经尝试过的命令的列表中,当我表示git checkout
时,我错误地写了git revert
。对不起,谢谢那些回答我应该尝试5英镑的人。我编辑了问题以更正它。我肯定已经尝试过5英镑。
没有找到相关结果
已邀请:
12 个回复
械怒等
街茬
(或本文的其他变体),该分支仍然顽固地将四个文件显示为“已更改但未更新”。 )! 这四个文件是必需的,但我肯定没有对其进行修改。我的最终解决方案-说服Git他们没有被更改。以下内容适用于所有检出的文件,并显示“已修改”状态-确保已提交/存放了真正修改过的文件!:
在Mac OSX上,不过xargs的操作略有不同(请评论Daniel):
我已将其添加为下一次自己的占位符,但我希望它也对其他人有所帮助。 铝
爆山
至:
保存并关闭,然后还原或重置, 感谢@Simon East的提示
死狸蔽垂藐
完成此操作后,您可以使用 git reset HEAD dir1 / foo.aspx 文件应该消失了。 (我从如何使git忽略模式更改(chmod)的答案中获得了所有这些信息。)
呕蹿尉
拈吉勉犬姆
但是在另一种情况下,我发现这是由于根目录中存在一个
文件,并且存在某些行尾设置,即使关闭了该文件,它仍试图对某些文件应用
文件。这实际上并没有帮助,所以我删除了
,已提交,文件不再显示为已修改。
破弯
烫珊
芦歉竭皑
复制的第二种方式: 在上面的脚本中,替换以下行:
与
并保持其余各行 以上都是怎么说?在某些情况下,文本文件可以是 用CRLF提交(例如
中的
/或
)。 当我们以后想将同一文件视为文本时(
->
),将需要再次提交。 当然,您可以暂时将其还原(由Abu Assar正确回答)。在我们的情况下:
答案是:您是否真的要这样做,因为每次更改文件都会引起相同的问题。 作为记录: 要检查哪些文件会在您的仓库中导致此问题,请执行以下命令(git应使用--with-libpcre进行编译):
通过提交文件(假设您要将其视为文本),与执行此链接http://help.github.com/line-endings/中提出的用于解决此类问题的建议相同。但是,代替删除
和执行
,您只需更改文件,然后执行
,然后提交即可。
邵酮
屠创氓读叔
2)重写Git索引以拾取所有新行结尾。
解决方案是git网站上描述的步骤的一部分 https://help.github.com/articles/dealing-with-line-endings/
坍锭嘉韭蓝