具体细节可能会因收件人的偏好而略有不同。作为一般规则,如果您需要修改补丁集,请提交 new 补丁集、“[v2] ...”(版本 2)、“v3”等.在“00/NN”条目中提供更新的(累积)描述也很好。您还可以在各个补丁中的剪切线部分之间添加说明性文本:
Subject: [PATCH v5 07/11] foo/blah: frobulate the mizzenbeast
...
... descriptive text about the patch extracted from a commit message ...
Signed-off-by: A U Thor <thor@example.com>
---
We can sneak in a bit more information here. This will not get
added to the commit.
dir/sub/some.ext | 3 ++
...
diff --git ...
由于这些补丁集实际上只是电子邮件,您可以在这里完全停止使用 Git。然而,这样做是困难的(至少在我看来)。
由于新的补丁集是一组新的电子邮件消息,并且您可能希望保留现有的工作,处理此问题的方法在 Git 本身是创建一个新分支.
假设以上是您的mizzenbeast 分支中的一系列补丁。我处理这个问题的方法是重命名该分支mizzenbeast-v1 并创建一个新分支mizzenbeast-v2。然后,您可以git cherry-pick 每次提交一个,直到找到需要更改的那个。此时您可以git cherry-pick -n 需要更改的提交。
现在,在您的索引和工作树中,所有内容都已暂存并准备好提交,但实际上并未提交。现在您可以进行任何您喜欢的更改,git add 他们,git commit 结果。
您现在已准备好继续挑选任何未更改的提交,解决因您所做更改而发生的任何冲突。完成后,您的 mizzenbeast-v2 分支将包含新的提交系列,准备好将 git format-patch 作为 [PATCH v2 nn/howmany] 发送到邮件列表以供审核。
(请注意,您仍然需要手动修改格式化补丁的文本,以插入 v2 和任何额外信息。)
让自己更轻松地完成这项工作
有一种更快更简单的方法来挑选所有内容并对其进行修改:使您的新分支 (mizzenbeast-v2) 指向重命名的 (mizzenbeast-v1) 分支的尖端提交,以便两个分支相同。然后运行git rebase -i <hash or identifier of where to start>。这会在一系列pick 命令上打开您的编辑器,这些命令告诉 Git 执行与您手动执行的相同的樱桃选择。将一个或多个更改为edit,写出文件,然后退出编辑器。 Git 现在将成为挑选过程,就像上面一样。然而,当它到达edit 时,它会挑选提交——这次没有 -n——然后停止。
现在您可以进行更改并使用git commit --amend 替换当前(匿名)mizzenbeast-v2-in-progress 分支提示提交。这与您在使用 git cherry-pick -n 时所做的类似,只是您将当前提交推到一边,而不仅仅是添加一个新提交。
完成后,您可以运行 git rebase --continue 来告诉 Git 继续执行保存的采摘指令。如果一切顺利,它将完成它们并将mizzenbeast-v2 分支标签移动到新分支的尖端。如果出现问题(由于在此过程中修改提交而导致的冲突),您将不得不再次修复它,git add 和 git rebase --continue。
(我建议等到在你用“艰难的方式”完成它之后再使用这个“更简单”的过程,手动挑选每个提交,至少一次或两次。原因是虽然这可以自动完成这项工作,但很难判断发生了什么。如果出现问题 - 并且事情将出错 - 清楚地了解 Git 在做什么以及您需要做什么是非常有帮助的现在就修复它。)