是否有git命令将文件从提交历史记录复制到工作目录,而还要复制到暂存区域?结帐复制到两者。也许没有一个足够常见的用例来保证命令,我要求更多的好奇心,而不是因为我有一个特定的应用程序。
答案 0 :(得分:2)
是否有git命令将文件从提交历史记录复制到工作目录而不复制到暂存区域?
不 - 但你可以合成一个。 git show
和git cat-file -p
都可以将blob对象复制到标准输出。因此,通过一次编写提交哈希值并将路径名称写入两次以查找blob哈希ID,并再次重命名命令的输出 - 您可以获得所需内容:
git cat-file -p $rev:$path > $path
或:
git show $rev:$path > $path
对每个目录中的每个文件重复一次,并且你已经足够接近 - 有一点需要注意:默认情况下,这些命令不应用行尾和输出过滤器转换(每{{1}和各种autcrlf和EOL修饰符)。
如果您添加.gitattributes
,则可以说服--textconv
应用文字转换。这应该适用于git cat-file
,但我还没有尝试过。
答案 1 :(得分:1)
您可以使用git stash --keep-index
来实现某些内容,这样可以保留索引的更改。
如果您想要的提交是HEAD,这适用于您。但它有隐藏变化的副作用
您可以定义存储和删除别名
答案 2 :(得分:0)
最简单的方法是使用git reset
和引用日志:
首先,将提交(或分支)中的文件系统状态应用于您的工作目录,暂存区和分支。
git reset --hard [commit/branch]
然后将登台区域重置并分支到先前的状态,而无需修改工作目录(默认为'--mixed'重置):
git reset HEAD@{1}
该提交中的文件位于您的工作目录中,仅此而已。请注意,如果您在步骤1和步骤2之间修改HEAD,那么HEAD@{1}
很可能不是正确的参考,您可以使用git reflog
来找到它。