[英]Copying files from Stage to Working Directory in git
在 git 中,通常有不止一种方法可以做一件事。 广义上 git 有三个相关区域:工作目录、阶段(索引)和本地存储库。 git 中的每个命令通常都会将文件从这些区域之一移动/复制到其他区域。 虽然将文件从工作目录移动到阶段和存储库很常见,但我想知道如何将文件从阶段复制/移动到工作目录。 我知道的一个命令是git checkout -- filename
。 这会丢弃对工作目录中该文件所做的更改,并将其替换为该文件的最后一个暂存版本。 我想知道是否还有不同的命令可以做同样的事情?
您可以使用以下命令取消暂存文件(将文件从暂存目录移回工作目录):
git restore --staged <file>
如果您在存储库上运行git status ,这是 git (version >= 2.23) 的建议方法。
运行git reset
将删除您在索引(以及存储库中)中的更改,但会将它们保留在工作目录中
例如,假设您已将一些文本git add
到文件并执行git add
其添加到暂存区。 如果你现在运行:
git reset HEAD^
然后添加的文本将不会出现在暂存中(也不会出现在存储库中),但它仍然会出现在工作目录中。 但是,这与git checkout -- <file>
,因为此命令会将文件恢复到上次记录的状态并丢弃更改,而无法将其恢复。 这被认为是一个有风险的命令,所以在运行它时一定要知道你在做什么
在 git 中,通常有不止一种方法可以做一件事。
没错:Git 有大量工具,它们之间有重叠。
广义上 git 有三个相关区域:工作目录、阶段(索引)和本地存储库。
这也是事实。
git 中的每个命令通常都会将文件从这些区域之一移动/复制到其他区域。
我认为这有点夸大其词,因为许多 Git 工具都没有:例如, git branch
只是操作分支名称, git tag
只是操作标签名称,等等。 但是肯定有工具可以进行这种复制。
...我想知道如何将文件从舞台复制/移动到工作目录
在 Git 2.23 之前,用于此的工具有些分散和笨拙。
在 Git 2.23 中, git checkout
命令被拆分为两个独立的、设计更好的工具: git switch
和git restore
。 git restore
命令具有复制到索引/暂存区和工作树的工具。 这些可以单独使用或一起使用。
git checkout
命令只有一种从索引/暂存区复制到工作树的形式,就是你提到的一种:
我知道的一个命令是
git checkout -- filename
git reset
命令就像旧的(并且仍然存在) git checkout
,因为它做了太多的工作并且没有很好地打包,但它也可以从索引复制到工作树。 这里的问题是,要这样做,它必须首先从提交复制到索引。 (另外值得注意的是:它仅使用git reset --hard
执行此操作,并且当您使用该模式时,您正在调整整个工作树,而不仅仅是单个文件。因此,该模式只有非常特定的用例,尽管它们'有点常见。)
git checkout-index
命令可以从索引复制到工作树。 它不经常使用:它是一个所谓的管道命令,用于编写新的面向用户的工具。
git show
和git cat-file
命令可以提取任何内部对象,包括索引中的对象。 您可以使用命令行重定向,例如, git show :0:README.md > index-copy-of-README.md
或git cat-file -p :Makefile | wc -l
git cat-file -p :Makefile | wc -l
,让您的任何常规工具处理数据。
如果您只想取消暂存特定文件,您可以使用
git rm --cached <file>.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.