当我执行带冲突的git rebase时,为社区创建补丁的最佳方法

时间:2014-06-04 14:10:05

标签: git patch

我怀疑与创建补丁并将它们重新组合成主分支。例如:

我在一个与master分开的分支中工作,我生成了5个提交更改。所以,我想将此提交作为社区补丁发送。以Linux内核为例。

其他开发人员在master分支中添加了新的提交,当我将我的5个补丁修改为master时,会出现一些冲突。

那么,我是否需要生成一个解决冲突的新补丁?那么,我是否需要发送5 + 1补丁(我的5次提交+ 1次冲突解决提交)?

我想知道发送修补程序和修复合并冲突的策略是什么。

3 个答案:

答案 0 :(得分:1)

这不是“疑问”,这是一个问题。

  

我将我的5个补丁变成了主人,出现了一些冲突。

你是如何解决冲突的?

你应该必须解决它们来完成rebase,所以你的分支中仍然只有5个提交,而不是5 + 1。

如果您在分支上执行git log master..,您应该会看到需要发送的提交。如果您正确地执行了rebase(并且没有提交冲突或破坏代码),那么仍然只有5个提交要发送。

因为冲突只存在于您的分支中,并且您应该在本地解决它们,否则其他任何人都不应该知道它们存在,因此您不需要向它们发送任何补丁来解决任何问题。

答案 1 :(得分:1)

解决这些冲突的最佳方法 - 不会产生不必要的"噪音"在你的补丁中,是在新主服务器上重新分支你的分支,然后创建你的补丁系列。这使您有机会解决任何冲突,而不会分散收件人的注意力,并且可以解决所有冲突问题。补丁。 (我相信这个工作流程在Linux内核的#34;入门"文档中进行了讨论(或至少提到过)。)

更新主分支

git checkout master
git pull

将您的更改重新定位到最新的上游HEAD(orig / master,master)

git checkout mybranch
git rebase master

# Resolve rebase conflicts here

创建补丁。此时,由于rebase,补丁应该干净地应用于上游HEAD。

git format-patch master

注意:这些命令未经测试,并且来自内存。

答案 2 :(得分:0)

使用git format-patch <since> | <revision range>

  

每次提交时,将每个提交及其补丁准备在一个文件中,格式化为类似于UNIX邮箱格式。此命令的输出便于电子邮件提交或与git am一起使用。

     

有两种方法可以指定要操作的提交。

1. A single commit, <since>, specifies that the commits leading to the tip of the current branch that are not in the history that leads to the <since> to be output.

2. Generic <revision range> expression means the commits in the specified range.