git - 我如何从历史上不同点的多个提交中制作一个 git 补丁?

标签 git git-rebase git-patch

我正在尝试从我的分支中的多个提交创建一个 git 补丁。但是,我需要从任意提交创建它(它们不一定在一个范围内)。在我想创建补丁的提交之间,一些提交更改了补丁中的一些文件可能也已更改。

这是我的用例(假设更大的数字 = 较晚的提交日期):

develop HEAD
Commit 5 - Changed a.txt
Commit 4 - Changed a.txt, b.txt, c.txt
Commit 3 - Changed b.txt, c.txt
Commit 2 - Changed a.txt
Commit 1 - Changed a.txt, b.txt, c.txt, d.txt
master HEAD

现在我希望能够从 develop 分支为提交 1、3 和 5 创建补丁,并将它们应用到 master 分支。

我环顾四周,我所能找到的就是在一个范围内创建补丁的能力。有没有一种方法可以为多个提交创建补丁,并在它们之间的文件中进行潜在更改?

最佳答案

master 中从 HEAD 创建一个新分支

git checkout master
git checkout -b newBranch

在这里 Cherry Pick 提交。

git cherry-pick commit1SHA
git cherry-pick commit3SHA
git cherry-pick commit5SHA

从中创建一个补丁。

git format-patch master --stdout > nameOfPatch.patch

现在,您想要将提交 1、3、5 从 develop 移动到 master。您可以简单地按照上述语句执行此操作,直到最后一次选择,然后:

git rebase -i HEAD~3

现在,选择第一个提交并压缩其他两个。您现在有一个单独的提交,它封装了所有其他三个提交。现在,只需挑选这个提交,说 squashedCommitSHA 掌握。

git checkout master
git cherry-pick squashedCommitSHA

关于git - 我如何从历史上不同点的多个提交中制作一个 git 补丁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31733081/

相关文章:

git - Git 版本控制中的补丁是什么?

git - 克隆企业 git 存储库

git - 作为 git 预提交钩子(Hook)执行 vim 命令

git - 如何更快地添加要提交的文件?

git rebase -i 用于特定提交?

git - 如何在具有更改历史记录的存储库上应用 git 补丁?

git - Git 中的文件级别跟踪(来自同一目录中多个分支的文件)

git - 奇怪的git merge 问题

git - 修改使用 merge 以使用 rebases 的 git 主题分支的历史记录

Git 格式补丁与 git log -p