有没有办法 Git 将特定文件从不同的分支拉到我的分支?

Is there a way to Git pull a specific file from a different branch to my branch?

你好,我想知道是否有办法将特定文件从不同的分支拉到我的分支,同时 compare/know 我的文件中添加了什么。

我试过这个方法git checkout -m origin/branch <yourfilepath>看来我的index.html基本上只是从我的队友index.html交换而没有从我的队友那里添加代码index.html 到我的。最后我尝试使用 git pull origin branch 至少使用 git pull 我基本上可以看到从我的 index.html(git fetch + git merge = git pull 添加了什么我从 git pull 中了解到,我可能是错的)但问题是它不会拉取特定文件,它必须拉取整个分支。

如果有另一种拉取特定文件的方法,我很想知道您对这个主题的看法。提前谢谢你

git 对合并单个文件的支持不多。您可以使用 git merge-file,但首先您需要文件的三个副本:

  • 你的版本
  • 你队友的版本
  • 一个“基本版本”,显示文件在进行任何一组更改之前的样子

例如,根据您所写的内容,当前状态可能如下所示:

... O -- A <--(origin/branch)
     \
      B <--(branch)

其中 A 包含您队友的版本,B(目前已在 branch 签出)包含您的版本。然后你可以做类似

的事情
git checkout origin/branch -- yourfilename
mv yourfilename yourfilename.theirs
git checkout $(git merge-base branch origin/branch) -- yourfilename
mv yourfilename yourfilename.base
git checkout HEAD -- yourfilename
git merge-file yourfilename yourfilename.base yourfilename.theirs

您可能希望保留 .base 和 .theirs 文件一段时间,同时检查结果(尤其是在存在冲突时);但你可能想在完成后清理它们

rm yourfile.base yourfile.theirs

此外,请注意:小心 -m 选项 checkout;根据您使用的 checkout 的形式,它的含义有所不同。在这种情况下,它并不意味着您想要什么(在那些意味着类似于您想要的东西的情况下,它可能会导致阶段性更改丢失)。