我之前在repo上执行了git filter-branch
,以便将代码库的一个子集迁移到另一个存储库,并保留其历史记录。
repo-old/x/y/z --> repo-new/z
我现在想回去修补最近从旧仓库到新仓库的提交。
我知道如何在旧的仓库中找到与子目录z相关的提交:
git log --name-status -<number> x/y/z
但是如何从旧的repo创建一个(理想的单个)补丁文件,只有那些来自特定子目录z的提交?
答案 0 :(得分:1)
假设您要在repo1
中的最后N次提交中修补,仅限于dir x/y/z
中的更改,并将其应用于repo2
,其中(我假设)由子树{{}组成1}}从z
拆分。
在repo1
:
repo1
在$ git diff HEAD~N z/y/z > ~/example.patch
:
repo2
注意-p3参数传递给$ patch -p3 < ~/example.patch
- 这意味着“删除受补丁影响的路径的前三个元素”。你想要'z / y'删除,补丁有'a / z / y'(补丁正常),这就是你需要传递patch
的原因。