【问题标题】:Is there a way to Git pull a specific file from a different branch to my branch?有没有办法让 Git 将特定文件从不同的分支拉到我的分支?
【发布时间】:2020-12-07 20:46:30
【问题描述】:

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

我已经尝试过这种方法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 merge-file

标签: git git-merge git-pull git-checkout git-fetch


【解决方案1】:

在 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 的形式,它的含义会有所不同。在这种情况下,它并不意味着你想要的(在那些意味着你想要的东西的情况下,它可能会导致阶段性更改丢失)。

【讨论】:

  • 嗨,先生,我忘了补充一点,我想合并的是我队友的 index.html 到我的 index.html 我的道歉先生,我真正的目标是改变我的队友的 index.html 应该添加到我的 index.html 基本上是一个 git pull
  • 我也得到了一个错误 mv: 'index.html' and 'index.html' are the same file
  • 是的,这是将队友的文件版本合并到您的版本中的过程;这可能是 index.html 或其他任何东西。我理解你为什么认为这是一个拉,但 git 不拉文件。该错误表明您错误地输入了mv 命令之一,或者您使用的操作系统只允许文件名中有一个点。我想不出一个只允许一个点的现代系统,但如果是这样,您可能不得不使用像 index.baseindex.theirs 这样的名称作为这些文件的临时名称。
猜你喜欢
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 2014-07-07
  • 1970-01-01
  • 2011-01-29
相关资源
最近更新 更多