Git:生成“feature”分支上所有提交的补丁,而不需要引用提交ID

3
我们在两个分支中维护我们的应用程序:freemastermaster是我们应用程序的高级版本)。这些分支非常相似,但master分支有一些额外的应用程序功能,而free版本没有,因此我们需要不断维护这两个分支。
通常情况下,我们需要修复free分支中的错误或添加功能,这些更改需要在完成后应用到master分支。当我需要进行这样的工作时,我会基于free创建一个名为newfeature的新分支。完成新功能后,newfeature将包含X个新提交。
在将newfeature合并回free之前,我想知道可以使用哪个命令从newfeature中生成补丁,以便将其应用到master。目前,我的做法是:
git format-patch aa99f9..e94904

据我所知,我需要查找分支newfeature的具体提交ID和最后一次提交,这是非常麻烦的。我对提交ID不感兴趣,也不想亲自输入它们。
我希望有一个单一的命令可以始终使用,让git自动找出我要使用哪些提交。每次都是相同的模式:给定newfeature分支,我想生成从newfeaturefree共同祖先newfeature上最新提交的提交补丁。
是否有某种变更集表达式可以避免手动查找提交ID的需求?
附言:据我所知,我不能使用git rebase来完成此任务,因为这将会将整个free分支合并到master上。我只想将唯一属于newfeature分支的提交合并到master上。

我相信你正在寻找 git merge-base。例如,https://dev59.com/LHI_5IYBdhLWcg3wF_F3 提供了复杂版本的合并基础查找和使用方法,但是对于许多情况来说,简单的 A...B 可能已经足够了。 - torek
1个回答

1
具体而言,您所要求的是:

特定于编程的内容:

git format-patch `git merge-base newfeature free`..newfeature

你可以通过这样做节省一些时间:

git checkout master
git cherry-pick `git merge-base newfeature free`..newfeature

根据您的工作流程,您可能需要在合并功能之前创建补丁。例如:
git checkout newfeature
git rebase free
git format-patch free

听起来你的工作流程可能可以通过将高级版基于免费版并将免费版功能合并到高级版中来改进。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接