如何在特定子目录的最后x提交上git patch

时间:2018-02-08 10:12:42

标签: git

我之前在repo上执行了git filter-branch,以便将代码库的一个子集迁移到另一个存储库,并保留其历史记录。

repo-old/x/y/z --> repo-new/z

我现在想回去修补最近从旧仓库到新仓库的提交。

我知道如何在旧的仓库中找到与子目录z相关的提交:

git log --name-status -<number> x/y/z

但是如何从旧的repo创建一个(理想的单个)补丁文件,只有那些来自特定子目录z的提交?

1 个答案:

答案 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的原因。