如何使用git checkout签出从提交历史到另一个文件夹的特定提交

时间:2017-01-14 00:11:28

标签: git

考虑到我的git日志中有这个:
提交847a363f6676bf5d07c42d6ebec834fea1c9a363

-------------------更正:
让我来纠正。 我使用git作为备份和版本控制工具。我希望在我的提交历史中获得以前的版本,而不会影响我当前工作目录中的任何内容。 我只想在一个单独的目录中获得给定提交号码中所有文件的副本。

2 个答案:

答案 0 :(得分:2)

我想你想要

git read-tree -u --prefix=path/to/dest/ 847a363f6676bf5d07c42d6ebec834fea1c9a363

编辑:啊,不,给定

  

在不影响我当前工作目录的任何内容的情况下。我只想在一个单独的目录

中给出一个给定提交号中的所有文件的副本

更好的是

mkdir -p /path/to/dest
GIT_INDEX_FILE=.git/junk GIT_WORK_TREE=/path/to/dest \
        git read-tree -u 847a363f6676bf5d07c42d6ebec834fea1c9a363
rm .git/junk

另一种可能性:

mkdir -p /path/to/it
git archive 847a363f6676bf5d07c42d6ebec834fea1c9a363 | tar Cx /path/to/it

如果你想在出路上做任何过滤,可能会更好,请参阅export-ignoreexport-subst属性。

答案 1 :(得分:0)

你想要的是git worktree。 使用git worktree add签出另一个目录中的提交。 这很容易使用,但我让你阅读文档,知道如何正确地做到这一点......