我有以下工作树状态

$ git status foo/bar.txt
# On branch master
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       deleted by us:      foo/bar.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

文件foo/bar.txt在那里,我想让它再次“不变的状态”(类似于'svn revert'):

$ git checkout HEAD foo/bar.txt
error: path 'foo/bar.txt' is unmerged
$ git reset HEAD foo/bar.txt
Unstaged changes after reset:
M       foo/bar.txt

现在情况变得令人困惑了:

$ git status foo/bar.txt
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   foo/bar.txt
#
# 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:   foo/bar.txt
#

两个部分都是同一个文件,新的和修改过的?我该怎么办?


当前回答

我发现git stash非常有用的临时处理所有“脏”状态。

其他回答

git checkout foo/bar.txt

你试过了吗?(没有HEAD关键字)

我通常以这种方式恢复我的更改。

你做错了。您应该首先重置,取消文件,然后签出,恢复本地更改。

试试这个:

$ git reset foo/bar.txt
$ git checkout foo/bar.txt

我发现git stash非常有用的临时处理所有“脏”状态。

如果上面的答案不管用,试试:

git reset -–merge
git checkout origin/[branch] .
git status

//在结尾加点。一切都会好起来的