为什么git不能通过path进行硬/软重置?

$ git reset -- <file_path>可以通过path重置。

但是, $ git reset (--hard|--soft) <file_path>会报告如下的错误:

 Cannot do hard|soft reset with paths. 

因为没有意义(其他命令已经提供了这个function),并且减less了偶然错误操作的可能性。

一个path的“硬重置”就是用git checkout HEAD -- <path> (检出文件的现有版本)完成的。

一个path的软重置没有意义。

path的混合重置是git reset -- <path>所做的。

你可以使用git checkout HEAD <path>来完成你正在做的事情。

也就是说,提供的错误信息对我来说没有任何意义(因为git reset在子目录上工作得很好),我没有看到为什么git reset --hard不应该完全按照你的要求去做。

问题已经得到解答 ,我将解释为什么部分。

那么, git reset会做什么? 根据指定的参数,它可以做两件事:

  • 如果指定了一个path,它将使用提交中的文件(默认为HEAD)replace索引中的匹配文件。 这个动作根本不影响工作树,通常用作git add的反义词。

  • 如果不指定path,则将当前分支头移动到指定的提交,并且可以将索引和工作树重置为提交的状态。 这个额外的行为是由模式参数控制的:
    – 软 :不要触摸索引和工作树。
    – 混合 (默认):重置索引而不是工作树。
    –hard :重置索引和工作树。
    还有其他选项,请参阅完整列表和一些使用案例的文档。

    当你不指定提交时,它默认为HEAD,所以git reset --soft将不会执行任何操作,因为它是将头移到HEAD(到当前状态)的命令。 另一方面,由于其副作用git reset --hard是有意义的,它表示将头移到HEAD 并将索引和工作树重置为HEAD。

    我想现在应该清楚为什么这个操作不是针对特定文件的本质 – 它首先打算移动分支头,重新设置工作树,索引是次要function。

git reset –soft HEAD〜1 filename取消提交,但更改保留在本地。 文件名可以是 – 对于所有提交的文件