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

问题描述

您好,我想知道是否有一种方法可以将特定文件从另一个分支拉到我的分支,同时比较/知道向我的文件添加了什么。

我尝试了这种方法git checkout -m origin/branch <yourfilepath>,看来我的index.html基本上只是从队友index.html调换而来的,没有从队友{{1 }}。最后,我尝试使用index.html至少使用git pull origin branch,我基本上可以看到git pullindex.html + git fetch = git merge我从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的{​​{1}}选项;根据您使用的checkout的形式,它的含义有所不同。在这种情况下,这并不表示您想要什么(在某些情况下,它表示您想要的东西,可能会导致分阶段的更改丢失)。