无法使用Git将文件重置为特定提交

时间:2010-12-14 17:03:10

标签: git git-checkout git-reset

我有一个修改过的文件,我想对最近一次提交中的任何内容进行反复处理,但它“卡住”,总是被标记为已修改。

$ 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:   index.php
#
no changes added to commit (use "git add" and/or "git commit -a")

然后我尝试:

$git checkout -- index.php

但是git状态的输出仍然是相同的。然后我尝试:

$git reset --hard master
HEAD is now at 02c9613 test commit message

git状态的输出仍然是相同的。

关于如何摆脱该文件中假设的更改的任何想法?

6 个答案:

答案 0 :(得分:3)

您必须从“索引”中删除index.php。然后你可以签出一个不同的版本。

git rm --cached index.php

应该做的伎俩。参见:

http://www.kernel.org/pub/software/scm/git/docs/git-rm.html

答案 1 :(得分:3)

您可能会遇到whitespace issue尝试git config --global apply.whitespace nowarn

如果这不起作用,我会说你遇到了一个错误。保存本地克隆以供将来参考(我希望它不是太大)并创建一个错误报告。特别是事实:

  • 您尚未自行修改文件
  • 其他文件未显示此问题

有迹象表明可能不是你在这里犯了错误。是否可以在干净的回购中重现问题也是有趣的信息。

答案 2 :(得分:1)

你试过了吗?

$ git checkout master -f -- index.php

$ git checkout master -f

如果reset没有这样做,我无法理解为什么会这样,但值得一试。

答案 3 :(得分:1)

尝试git ls-files -m | xargs -i git update-index --assume-unchanged "{}"

答案 4 :(得分:0)

FWIW,我能够通过删除显示已修改的目录中的.git子目录来解决此问题。一旦.git子目录(作为子目录是.git项目本身)已经消失,父文件夹就不再显示已修改。如果有问题的文件与无关的.git文件夹位于同一文件夹中,则可能会产生影响。

答案 5 :(得分:0)

我被困在同样的混乱中。我有一些文件,我在git status中无法摆脱。尝试以任何方式重置或签出文件后,我决定实际添加有问题的文件并提交它们。 Git似乎很满意。 然后我回到上一次提交,问题解决了,问题文件确实消失了。

它没有解释这个错误,但如果这个解决方案可以解决这个问题,那就太好了。