文章目录
- 场景说明
- 方案一:git archive 最简单省事
- 方案二:git show 最灵活, 但文件较多时麻烦
- 方案三:`git --work-tree` 有bug
场景说明
- 我不想checkout到覆盖本地工作区的文件,
而是想把该 - 版本checkout到另外一个文件夹下,检出看看,这个文件夹不被git管理
方案一:git archive 最简单省事
git archive <commit_hash> | tar -x -C <new_folder>
将 <commit_hash> 替换为你想要检出的具体commit的哈希值,<new_folder> 替换为你想要保存文件的新文件夹路径。
这条命令会创建一个tar归档文件,并将其解压到指定的新文件夹中,保持了原来的文件结构。
注意:你需要确保 <new_folder> 不存在,或者是一个空文件夹,否则会报错。
方案二:git show 最灵活, 但文件较多时麻烦
另一个方案是利用git show
结合重定向>
逐个检出文件,比如:git show 94119e2:test.py > test_v1.0.py
,有多个文件的话就逐个执行。
方案三:git --work-tree
有bug
方案:通过指定--work-tree=/path/to/dist 可实现目标功能git --work-tree=/d/mycode/test_git/labs/2053 checkout 3d9862a -- .其中:• git checkout 3d9862a -- .○ 检出指定版本的所有文件○ `.`表示所有文件, 也可以换成某个文件/文件夹• --work-tree=/d/mycode/test_git/labs/2053○ 用于指定检出到的位置,该路径必须存在○ 如果该路径下已有文件,则会直接覆盖
执行这个命令之后会把你的文件变成not staged for commit, 然后执行git add
就可以了,不需要再commit.