我想知道如何更新一个补丁,它是修补程序集的一部分,并且已经提交给开源项目了?
在线教程提到使用--修改,但要修复的补丁不是最后一个,而是第5个中的第2个。
还有,我想确定.我应该再次提交整张拼贴还是只提交固定的一张?
谢谢。
发布于 2017-10-03 15:12:46
具体细节可能会因收件人的喜好而略有不同。通常情况下,如果需要修改修补程序集,则提交一个新的修补程序集"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
one时,它将选择提交--这一次没有-n
-but,然后停止。
现在,您可以进行更改,并使用git commit --amend
来替换当前(匿名)mizzenast-v2正在进行的分支提示提交。这与您在使用git cherry-pick -n
时所做的类似,只不过您正在搁置当前提交,而不是仅仅添加一个新的提交。
一旦完成,您可以运行git rebase --continue
来告诉Git继续保存的摘樱桃指令。如果一切顺利,它将完成所有操作,并将mizzenbeast-v2
分支标签移到新分支的顶端。如果出了问题(由于在此过程中修改了提交而产生了冲突),您将不得不再次修复这个问题,git add
和git rebase --continue
。
(我建议等待使用这个“更容易”的过程,直到您以“艰难的方式”完成之后,手动选择每个提交,至少一次或两次。原因是,虽然这是自动化的工作,但很难判断发生了什么。如果出了问题--事情会出错--清楚地知道Git在做什么,以及现在需要做什么来修复它,这是非常有帮助的。)
https://stackoverflow.com/questions/46542253
复制相似问题