如何使用补丁集更新单个补丁?

时间:2017-10-03 10:16:37

标签: git open-source patch u-boot

我想知道如何更新作为补丁集一部分并已提交给开源项目的补丁?

在线教程使用--amend提及,但要修复的补丁不是最后一个补丁,而是它的5号中的第2个。

另外,我想确定...我应该再次提交整个补丁集还是仅提供固定的补丁集?

  • 附加信息:补丁集用于U-Boot,使用求职信和附件创建。编号如下: git format-patch -o / home / sam / patchset --cover-letter -n --thread = shallow 0b9c250 ^ .. fd3c12d

谢谢。

1 个答案:

答案 0 :(得分:2)

根据收件人的偏好,具体细节可能略有不同。作为一般规则,如果您需要修改补丁集,则提交 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 addgit rebase --continue

(我建议等待使用这个“更简单”的过程,直到之后你已经完成了“艰难的方式”,手动挑选每次提交,至少一次或两次。原因是虽然这可以自动完成这项工作,但很难说出发生了什么事情。如果出现问题 - 并且出错 - 那么明确Git正在做什么以及你需要什么对我们非常有帮助现在做修复它。)