Git:从提交复制到工作目录

时间:2017-08-06 21:05:20

标签: git

是否有git命令将文件从提交历史记录复制到工作目录,而还要复制到暂存区域?结帐复制到两者。也许没有一个足够常见的用例来保证命令,我要求更多的好奇心,而不是因为我有一个特定的应用程序。

3 个答案:

答案 0 :(得分:2)

  

是否有git命令将文件从提交历史记录复制到工作目录而不复制到暂存区域?

不 - 但你可以合成一个。 git showgit 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来找到它。

相关问题