如何将不同存储库中的一个文件的更改合并到另一个文件中

时间:2015-09-08 15:12:42

标签: git merge patch

将一个文件从一个分支合并到另一个分支已经asked before,并且要做到相当简洁solution

git checkout A
git checkout --patch B f

但是如何在两个存储库中有效地做到这一点?

1 个答案:

答案 0 :(得分:1)

还有一个简单的解决方案,它涉及修补。 git可以很好地处理通过电子邮件发送的补丁。这是Linus Torvalds最重要的初始用例之一。所以我们首先在源代表中生成这样的补丁文件,然后在目标中使用它:

cd source_repository/
git log --reverse --follow -p --format=email   filename  > patch

cd other_repository/
git am --whitespace=nowarn source_repository/patch

rm source_repository/patch

一些解释:

  • git am代表“git apply mailbox file”,用于集成某人通过电子邮件发送的补丁
  • git log –p可以使用选项--format=email
  • 创建此类补丁文件
  • --follow用于跟踪文件的完整历史记录,即使它已重命名。 --follow阻止git log接受多个文件名。但这是一个重要的开关,这就是为什么我建议在多个文件的循环中使用此方法。
  • --reverse是必需的,因为git am要求提交按时间顺序排列,默认情况下git log不会输出。
  • 默认情况下git am会警告带有尾随空格的行。 --whitespace=nowarn会抑制这些警告。您可能不想使用它并清理空白,但这是样式指南的问题