提问者:小点点

如何将Git补丁应用于不同名称和路径的文件?


我有两个存储库。在其中一个中,我对文件./hello.test进行了更改。我提交了更改,并使用git format-patch -1 HEAD从该提交中创建一个补丁。现在,我有了第二个存储库,其中包含一个与hello.test内容相同的文件,但以不同的名称放置在不同的目录中:./blue/red/hi.test。如何将上述补丁应用于 hi.test 文件?我试过 git am --directory='blue/red'


共3个答案

匿名用户

您可以使用git diff创建修补程序,然后使用patch实用程序应用修补程序,该实用程序允许您指定要将差异应用到的文件。

例如:

cd first-repo
git diff HEAD^ -- hello.test > ~/patch_file

cd ../second-repo
patch -p1 blue/red/hi.test ~/patch_file

匿名用户

有一个简单的解决方案,既不涉及手动补丁编辑,也不涉及外部脚本。

在第一个存储库中(这也可能导出一系列提交,如果您只想选择一个提交,请添加< code>-1标志) :

git format-patch --relative <committish> --stdout > ~/patch

在第二存储库中:

git am --directory blue/red/ ~/patch

另一种解决方案是使用-p,而不是在git格式补丁中使用相对

也可以运行 git format-patch --relative

匿名用户

基于@georgebrock的回答,我使用了以下解决方案:

首先,像往常一样创建补丁文件(例如< code>git format-patch commitA..commitB)。

然后确保您的目标存储库是干净的(应该没有更改或未跟踪的文件),并像这样应用修补程序:

cd second-repo
git am ~/00*.patch

对于每个补丁文件,你会得到一个类似“错误:XYZ不存在于索引中”的错误。现在,您可以手动应用此修补程序文件:

patch --directory blue/red < ~/0001-*.patch
git add -a
git am --continue

您必须为每个修补程序文件执行这三个步骤。

这将保留原始提交消息等。无需任何特殊的< code>git format-patch命令或编辑补丁文件。