Git:can't undo local changes(error:路径...未合并)

yr9zkbsy  于 2023-05-12  发布在  Git
关注(0)|答案(8)|浏览(202)

我有以下工作树状态

$ 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在这里,我想让它再次回到“unchanged state”(类似于'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
#

两个部分中的同一个文件,new * 和 * modified?我该怎么办?

6vl6ewon

6vl6ewon1#

你做错了。您应该首先重置以取消暂存文件,然后 checkout 以恢复本地更改。
试试这个:

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

izkcnapc2#

这对我来说非常有效:

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

yws3nbqq3#

git checkout origin/[branch] .
git status

//注意结尾的圆点(.)。一切都会好起来的

q0qdq0h2

q0qdq0h24#

在最近的git版本中,git restore被认为是一种比重载的checkout更好的恢复不需要的本地更改的方法。很好,这听起来很合理-一个很好的简单的专用工具,用于一个常见的操作。
但是,这是我新的“最喜欢的”git bug。是的,我知道有些笨蛋会说,“这不是一个错误,这是设计”。但是对于这种用户界面,我支持“bug”的绰号:

% 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
然后去社区找一个解决方案。我看你敢不敢。
显然,我没有让我的参考处于这样一种状态,即树状的blob可以通过从工作文件到暂存区域的提交来解决……错误索引?

uidvcgyl

uidvcgyl5#

如果上面的答案不起作用,请尝试:

git reset -–merge
cfh9epnr

cfh9epnr6#

使用restore命令(自git v2.23,2019年8月起)修复未合并路径错误的“现代”方法,当您弹出您的stash时可能会发生:

# unstage the file
git restore --staged myfile

# restore the file (lose your working dir changes)
git restore myfile
tf7tbtn2

tf7tbtn27#

git checkout foo/bar.txt

你试过了吗?(没有HEAD关键字)
我通常以这种方式恢复我的更改。

uurv41yg

uurv41yg8#

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

相关问题