Git:无法撤消本地更改(错误:路径...已取消合并)

时间:2010-06-11 08:04:46

标签: git git-checkout git-reset

我有以下工作树状态

$ 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
#

两个部分中的相同文件,新已修改?我该怎么办?

6 个答案:

答案 0 :(得分:492)

你做错了。您应首先重置,取消暂存文件,然后结帐,以恢复本地更改。

试试这个:

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

答案 1 :(得分:40)

这对我很有用:

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

答案 2 :(得分:12)

git checkout origin/[branch] .
git status

//注意末尾的点(。)。一切都会好的

答案 3 :(得分:1)

在最近的 git 版本中,与重载的 git restore 相比,checkout 应该是一种“更好”的方式来恢复不需要的本地更改。太好了,这听起来很合理 - 一个很好的简单的通用操作专用工具。

但是,这是我新的“最喜欢的”git 错误。是的,我知道有些 git-head 会说,“这不是错误,这是设计使然”。但是对于这种用户界面,我支持“错误”绰号:

% git restore LEGAL
error: path 'LEGAL' is unmerged
# okay, fine...
% git restore --ignore-unmerged LEGAL
warning: path 'LEGAL' is unmerged
# Arg, what?!

(由 git 2.25.1 提供)

首先是小问题:当工具由于特定条件而拒绝执行某事时,这不仅仅是警告。 至少应该说操作没有执行。现在我必须去调查是否真的执行了操作(提示:没有执行)。

当然,第二个问题是显而易见的。现在,让我们看看手册页条目,看看为什么这个出色的工具不会按照我的要求执行:

   --ignore-unmerged
       When restoring files on the working tree from the index, do not
       abort the operation if there are unmerged entries and neither
       --ours, --theirs, --merge or --conflict is specified. Unmerged
       paths on the working tree are left alone.

天啊!我猜这里用户界面问题的 git-ish 修复是将选项从 --ignore-unmerged 重命名为 --ignore-unmerged-except-in-cases-where-we-do-not-want-to-allow-that--consult-documentation-then-source-code-then-team-of-gurus-when-you-cannot-figure-it-out---and-wait-while-half-of-them-argue-about-why-it-is-right-as-is-while-the-other-half-advocate-adding-four-more-options-as-the-fix

然后去社区寻找解决办法。我敢。

显然,我的引用没有处于可以通过从工作文件到暂存区的提交来解决树状斑点的状态......错误索引?

答案 4 :(得分:-2)

git checkout foo/bar.txt
你试过那个吗? (没有HEAD关键字)

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

答案 5 :(得分:-4)

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