有没有办法重置工作目录中的所有文件,而不是那些来自暂存区域的文件?
我知道使用以下命令可以重置任何单个文件:
git checkout thefiletoreset.txt
此外,通过使用以下命令,可以将整个存储库重置为上次提交状态:
git reset --hard
但是有没有任何命令可以重置整个工作目录,而暂停区域不受影响?
答案 0 :(得分:1)
我原来的问题并不完全清楚,但您的意见表明您的意思是:
的答案确实是git checkout
。您可以给git checkout
各种选项,但默认是读取当前索引/暂存区:
git checkout -- file
从暂存区域向工作树提取file
的版本,无论file
的临时区域版本是否与HEAD
的{{1}}提交版本匹配}}
正如您所见:
file
提取路径名以git checkout -- directory
开头的所有文件。由于directory/
命名当前目录:
.
如果您位于工作树的顶层,则提取索引中存在的所有文件。
(如果您想要的文件名类似于git checkout -- .
选项或分支名称,则需要--
。例如,如果您想要名为git checkout
或{{1}的文件},master
或-b
会混淆git checkout master
,但git checkout -b
会告诉git checkout
git checkout -- -b master
和git checkout
是两个文件,而不是-b
选项。养成在这里自动使用master
的习惯很好。)
答案 1 :(得分:1)
但是,是否有任何命令可以重置整个工作目录,而保留暂存区域不变?
使用Git 2.23(2019年第三季度),可以: git restore
。
请参见commit 97ed685,commit d16dc42,commit bcba406(2019年6月20日),commit 4e43b7f,commit 1235875,commit 80f537f,commit fc991b4 ,commit 75f4c7c,commit 4df3ec6,commit 2f0896e,commit a5e5f39,commit 3a733ce,commit e3ddd3b,commit 183fb44,commit 4058199,{ {3}之前的{3}},commit a6cfb9b,commit be8ed50,commit c9c935f和commit 46e91b6(2019年3月29日)。
(由commit 328c6cb在Nguyễn Thái Ngọc Duy (pclouds
)中合并,2019年7月9日)
checkout
:将其一部分拆分为新命令'restore
'以前,“
git checkout
”的交换分支业务变为Junio C Hamano --gitster
--。这会添加restore
命令来检出路径path。类似于
git-switch
,添加了一个新的手册页来描述该命令将成为什么。该实现将很快更新以匹配手册页。与'
git checkout <paths>
'的一些主要区别:
'
restore
'默认情况下只会更新工作树。
指定--source
时,这一点尤其重要('checkout <tree> <paths>
'同时更新工作树和索引)。- 当同时指定
'
restore --staged
'可用于恢复索引。
此命令与'git reset <paths>
'重叠。--staged
和--worktree
时,也可以同时从树中恢复- 重叠
工作树和索引。这与“
git checkout <tree> <paths>
”还原工作树和索引的默认源分别是索引和HEAD。可以使用
--source
(*)指定一个不同的(树)源。同时还原索引和工作树时,必须指定
--source
,因为这两个目标的默认来源不同(**)
--no-overlay
默认为启用,如果源中缺少条目,则还原意味着删除该条目(*)我最初选择的是
--from
,而不是--source
。
我仍然认为--from
是一个更好的名字。短选项-f
已被force
所采用。我确实认为短期选择是很好的选择,例如写-s@
或-s@^
而不是--source=HEAD
。(**)如果您坐下来考虑一下,将工作树的源从索引移动到HEAD是有道理的,但是当他们键入命令时,没人真正想到它。