git:将另一个分支的文件检出到当前分支(不要切换HEAD到另一个分支)

71
我想将另一个分支中存在的不同版本的文件加载到我的当前分支中。 < p > git help checkout说:

DESCRIPTION
   Updates files in the working tree to match the version in the index or
   the specified tree. If no paths are given, git checkout will also
   update HEAD to set the specified branch as the current branch.

有没有一种方法可以检出所有这些文件,但是不更新 HEAD?


@BobbyA 我不这么认为。1:问题和答案是关于其他事情的(分支和文件/文件夹名称冲突)。2:这个问题比较旧。 - Kache
我误标记了错误的问题(多个选项卡),但马上意识到并撤回了标记。然而,我没有意识到有一条评论存在。我被抓住了!对此深表歉意 :) 现在删除该评论,因为它是误导性的。 - BobbyA
2个回答

99

通过提供当前路径.来检出:

git checkout other-branch-name -- .

此操作类似于切换HEAD到另一个分支而不检出文件,但只是从"另一个方向"进行。

如@김민준所提到的,这将覆盖任何未提交的更改。如果需要,请记得先把它们储藏或提交到其他地方。


6
提醒一下,这将放弃您所有未提交的工作。回想起来很明显,但我遭受了严重打击。:'( - 김민준
1
这是从一个特性分支执行合并的最简单方法,而你又不想保留所有细节。-- . 有点难找,谢谢! - Laurent Caillette
1
你能解释一下 "-- ." 实际上是在做什么吗?"." 在这里和没有参数的 "--" 意味着 "全部" 吗? - red888
据我所知,Git使用“--”作为左侧命令和右侧文件通配符之间的分隔符。 - Kache
这对我来说并不完全适用,因为我使用的是Windows(也许有其他差异?),我必须使用git checkout <other-branch-name> -- C:\path\to\changes\* - rythos42

7
类似于@Kache's answer,但使用更新的git restore命令(需要Git版本2.23或更高版本):
git restore --source=<other-branch/tag/commit> <pathspec>
# or
git restore -s <other-branch/tag/commit> <pathspec>

# example: to load all files from branch "other"
git restore -s other .

这个新命令被引入,将“检出分支”和“检出文件”从单个git checkout命令中分离出来。阅读更多:什么是git restore命令

我建议在这个命令中添加--overlay选项,否则你可能会丢失所有未提交的内容。 - undefined

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