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