$ git reset -- <file_path>
可以通过路径复位。
然而, $ git reset (--hard|--soft) <file_path>
将报告类似下面的错误:
Cannot do hard|soft reset with paths.
$ git reset -- <file_path>
可以通过路径复位。
然而, $ git reset (--hard|--soft) <file_path>
将报告类似下面的错误:
Cannot do hard|soft reset with paths.
因为没有点(其他命令提供该功能的话),并减少潜在的意外做了错误的事情。
“硬重置”的路径,只是做git checkout HEAD -- <path>
(检查出该文件的现有版本)。
对于路径软复位没有意义。
对于路径的混合复位是什么git reset -- <path>
一样。
你可以成就你试图用做什么git checkout HEAD <path>
。
这就是说,所提供的错误信息是没有意义的,我(作为git reset
工作的子目录就好了),我认为没有理由git reset --hard
不应该做你问它到底是什么。
现在的问题已经是如何 回答 ,我将解释为什么部分。
那么,是什么混帐复位吗? 根据规定,它可以做两件不同的事情的参数:
如果指定的路径,它取代了(默认为HEAD)与文件索引从提交匹配的文件。 此操作并不影响工作树都和通常用作混帐的相对增加。
如果不指定路径,它会将当前分支头到指定的承诺,并与一起 ,选择地重置索引和工作树中犯下的状态。 这种额外的行为由模式参数控制:
--soft:不要触摸索引和工作树。
--mixed(默认):重置索引而不是工作树。
--hard:重置索引和工作树。
还有其他选项,请参阅完整列表和一些使用情况的文档。
当你不指定提交,默认为HEAD,所以git reset --soft
不会做任何事情,因为它是移动的头对头的命令(其当前状态)。 git reset --hard
,在另一方面,是有道理的,因为它的副作用 ,它说将磁头移动头部和重置索引和工作树头。
我觉得应该由现在为什么这个操作不是由它的性质特定的文件明确 - 这是为了在第一时间移动分公司负责人,重置工作树和索引是次要功能。
在git reset
手动列出调用的3种方式:
2文件明智: 这不影响工作的树 ,但仅限于在由指定的索引中的文件操作<paths>
:
git reset [-q] [<tree-ish>] [--] <paths>..
git reset (--patch | -p) [<tree-ish>] [--] [<paths>...]
图1是提交明智:操作上的所有文件中所引用的<commit>
,并且可能会影响工作树:
git reset [<mode>] [<commit>]
有没有调用的模式才动作指定的文件,影响工作树。
如果你既想:
您可以在您的git配置文件使用此别名:
[alias]
reco = !"cd \"${GIT_PREFIX:-.}\" && git reset \"$@\" && git checkout \"$@\" && git status --short #" # Avoid: "fatal: Cannot do hard reset with paths."
那么你可以做的一个:
$ git reco <paths>
$ git reco <branch/commit> <paths>
$ git reco -- <paths>
(Mnenonic为reco
: re
组&& c
赫克o
UT)
有背后的一个很重要的原因: 原则checkout
和reset
。
在Git中的术语,指结账 “纳入当前工作树”。 并与git checkout
,我们可以从任何地方使用数据填充工作树,被它承诺在从提交或临时区域 (这是即使是默认值)的存储库或单个文件。
反过来,git的复位没有这个角色。 顾名思义,它会重置当前REF但总是具有独立的“到达”的存储库作为源,(--soft,--mixed或--hard)。
概括:
因此,有什么可以让人有点困惑是存在git reset COMMIT -- files
,因为“覆盖HEAD”,只有一些文件是没有意义的!
在没有一个官方的解释,我只能猜测,git的开发商发现, reset
仍然是一个命令丢弃到临时区域和所做的更改的最好的名字,给了我们唯一的数据来源是仓库,然后在“ 让我们延长功能 “,而不是创建一个新的命令。
所以,在某种程度上git reset -- <files>
已经是一个有点特殊:它不会覆盖HEAD。 恕我直言,所有的这些变化将是例外。 即使我们可以设想一个--hard
版本,其他人(例如--soft
)就没有意义。
git的复位--soft HEAD〜1 名取消提交,但变化仍留在地方。 文件名可以是-所有COMMITED文件