首页 > 解决方案 > 有没有办法让 Git 将特定文件从不同的分支拉到我的分支?

问题描述

嗨,我想知道是否有办法将特定文件从不同的分支拉到我的分支,同时比较/知道添加到我的文件中的内容。

我已经尝试过这种方法git checkout -m origin/branch <yourfilepath>,似乎我index.html基本上只是从我的队友那里交换index.html并且没有从我的队友那里添加到我的代码index.html。最后,我尝试使用git pull origin branchatleast ,git pull我可以看到我添加的内容index.htmlgit fetch+ git merge=git pull基本上我理解的内容git pull可能是错误的),但问题是它没有拉取特定文件,它必须拉取整个分支。

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

标签: gitgit-mergegit-pullgit-checkoutgit-fetch

解决方案


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

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

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

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

whereA包含您队友的版本,并且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根据您使用的形式,它的含义有所不同。在这种情况下,它并不意味着你想要什么(在那些意味着你想要什么的情况下,它可能会导致阶段性更改丢失)。


推荐阅读