如何重置工作目录中的所有文件,而不是从暂存区域重置?

时间:2018-01-29 19:41:02

标签: git

有没有办法重置工作目录中的所有文件,而不是那些来自暂存区域的文件?

我知道使用以下命令可以重置任何单个文件:

git checkout thefiletoreset.txt

此外,通过使用以下命令,可以将整个存储库重置为上次提交状态:

git reset --hard

但是有没有任何命令可以重置整个工作目录,而暂停区域不受影响?

2 个答案:

答案 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 mastergit checkout是两个文件,而不是-b选项。养成在这里自动使用master的习惯很好。)

答案 1 :(得分:1)

  

但是,是否有任何命令可以重置整个工作目录,而保留暂存区域不变?

使用Git 2.23(2019年第三季度),可以: git restore

请参见commit 97ed685commit d16dc42commit bcba406(2019年6月20日),commit 4e43b7fcommit 1235875commit 80f537fcommit fc991b4commit 75f4c7ccommit 4df3ec6commit 2f0896ecommit a5e5f39commit 3a733cecommit e3ddd3bcommit 183fb44commit 4058199,{ {3}之前的{3}},commit a6cfb9bcommit be8ed50commit c9c935fcommit 46e91b6(2019年3月29日)。
(由commit 328c6cbNguyễ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是有道理的,但是当他们键入命令时,没人真正想到它。