从分支中检出文件而不更改索引

23

在我的Git开发中,我使用以下的checkout命令结构将其他分支的单个文件带入我的工作目录。

git checkout [<tree-ish>] [--] <pathspec>…​
根据文档,这也会将文件更新到我的索引中,就好像我想提交它一样 - 如果我不想提交文件,则还需要删除它。 (我们正在处理二进制文件的开发 :( ,这种工作方式有助于测试我们自己的工作,可能与另一个同时进行开发的开发人员的工作相关)

是否有一种方法可以从分支/提交中拉取/检出单个文件,以便更新工作目录而不是索引?


我想我可以将这两个步骤定义为别名命令,但我想知道是否已经存在一个(单个)git命令可以完成这个任务。


2
我也很好奇是否有办法做到这一点。但是看起来Git的维护者认为在正常工作流程中并不那么有用。 - Mariusz Pawelski
1
如果你想绕过索引,可以使用cat-file或show命令;但在正常的工作流程中,构建下一个提交版本时,这并不是一个有用的操作,这也是为什么没有像“checkout --no-index HEAD~47 path”这样的选项的唯一原因。如果有人能够提出令人信服的用例来证明它的有用性,那么添加这样一个选项应该不会很难。但我想不到任何用例。 - Mariusz Pawelski
2个回答

22
git restore --source=<tree> --worktree <pathspec>...

请查看手册


1
它可以工作,但是更多(直接)的解释会更好。 - Martini Bianco
@MartiniBianco 从源<tree>将由<pathspec>指定的文件恢复到您当前的工作树。 - Niklas Holm
2
这个回答现在比被采纳的回答更好(尽管在它被写出来的时候,它是最好的回答)。 - Kevin Worth

14

另一种方法是:

git show otherBranch:fileName > fileName

这将创建一个具有另一个分支文件内容的新文件

但是,如果您的工作流程经常需要执行此步骤,则可以创建别名


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