我想知道如何更新作为补丁集一部分并已提交给开源项目的补丁?
在线教程使用--amend提及,但要修复的补丁不是最后一个补丁,而是它的5号中的第2个。
另外,我想确定...我应该再次提交整个补丁集还是仅提供固定的补丁集?
谢谢。
答案 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 add
和git rebase --continue
。
(我建议等待使用这个“更简单”的过程,直到之后你已经完成了“艰难的方式”,手动挑选每次提交,至少一次或两次。原因是虽然这可以自动完成这项工作,但很难说出发生了什么事情。如果出现问题 - 并且将出错 - 那么明确Git正在做什么以及你需要什么对我们非常有帮助现在做修复它。)