我有以下工作树状态
$ 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?我该怎么办?
8条答案
按热度按时间6vl6ewon1#
你做错了。您应该首先重置以取消暂存文件,然后 checkout 以恢复本地更改。
试试这个:
izkcnapc2#
这对我来说非常有效:
yws3nbqq3#
//注意结尾的圆点(.)。一切都会好起来的
q0qdq0h24#
在最近的git版本中,
git restore
被认为是一种比重载的checkout
更好的恢复不需要的本地更改的方法。很好,这听起来很合理-一个很好的简单的专用工具,用于一个常见的操作。但是,这是我新的“最喜欢的”git bug。是的,我知道有些笨蛋会说,“这不是一个错误,这是设计”。但是对于这种用户界面,我支持“bug”的绰号:
(由git 2.25.1提供)
首先是小问题:当一个工具由于特定的条件而拒绝执行某些操作时,这不仅仅是一个警告。至少它应该说操作没有执行。现在我必须去调查操作是否实际执行(提示:它不是)。
当然,第二个问题是显而易见的。现在,让我们看看手册页条目,看看为什么这个奇妙的工具不会做我告诉它做的事情:
我的天!我猜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可以通过从工作文件到暂存区域的提交来解决……错误索引?
uidvcgyl5#
如果上面的答案不起作用,请尝试:
cfh9epnr6#
使用
restore
命令(自git v2.23,2019年8月起)修复未合并路径错误的“现代”方法,当您弹出您的stash时可能会发生:tf7tbtn27#
你试过了吗?(没有HEAD关键字)
我通常以这种方式恢复我的更改。
uurv41yg8#
我发现git stash对于所有“脏”状态的临时处理非常有用。