如何使用Git检出特定版本?

3

有时我想使用Git完成这个简单的操作:

我有一个包含多个提交的git存储库。

现在,如何检出特定提交的所有目录和文件?

我应该在本地克隆仓库,然后对该特定提交执行git checkout吗?

是否有更简单的命令只需将特定提交的所有文件和目录检出到本地目录?我只是要使用这些文件,并不会改变它们等,所以我不需要为检出几个文件并查看它们而创建一个本地存储库。正确吗?

3个回答

3
我认为你正在寻找git archive。也许可以尝试以下命令:
 $ git archive --format=tar --prefix=my-tag-or-commit-id/ my-tag-or-commit-id | (cd /path/to/repo/checkout && tar xf -)

请查看 git help archive 获取其他选项和示例。您也可以使用远程分支名称作为 <tree-ish>

希望这能帮到您。


这正是我正在寻找的。我只需要从存储库中下载一堆特定提交的文件,而git archive似乎恰好能做到这一点! - Shanthi
+1. 我没有读到你最后一段。这就是你需要的。你可以使用标签来记住你存档的提交,以防你需要跟踪。 - Noufal Ibrahim

1

当你有一个仓库时,你就拥有所有文件的所有修订版本可供使用。 首先,使用git log查找您感兴趣的提交。 然后,一旦您发现您感兴趣的提交方式, 您可以使用 git branch branch_name <您感兴趣的提交> 从该提交处开始创建一个分支。现在,您将拥有一个名为branch_name的本地分支,并且您可以使用git checkout branch_name来查看那个时候的情况。


1

如果您想将您的repo设置为fa4ef34的状态(即提交状态),请使用{{link1:git checkout}}:

git checkout fa4ef34

这将使您的工作副本回到fa4ef34状态。

如果您想再次检出master,请执行

git checkout master

然而,如果您对远程存储库的某个提交感兴趣,则必须进行一些不同的操作。

首先,初始化本地存储库:

git init myrepo
cd myrepo

现在,您已经进入了新创建的本地存储库。要获取远程存储库(例如蓝牙数据包分析器)的提交记录,您需要执行以下操作:

git remote add bluez_hcidump git://git.kernel.org/pub/scm/bluetooth/bluez-hcidump.git
git fetch bluez_hcidump

现在,您的仓库已经了解了关于bluez_hcidump仓库的一切。如果您想访问属于该仓库的提交fa4ef34,请按照我回答开头描述的步骤进行操作。


但是你能在不先执行“git clone remoterepo”命令的情况下完成这个任务吗? - tripleee
@tripleee:不,你总是需要克隆存储库。Git没有“在您的计算机上没有存储库”的概念。要执行任何有意义的操作,您必须在本地拥有存储库。(当然,除非您希望在远程计算机/存储库上执行操作) - KillerX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接