【问题标题】:Git: Generate patch of all commits made on "feature" branch without referring to commit IDsGit:生成在“功能”分支上所做的所有提交的补丁,而不参考提交 ID
【发布时间】:2012-06-09 00:37:35
【问题描述】:

我们在两个分支中维护两个版本的应用程序:freemastermaster 是我们应用程序的高级版本)。这些分支非常相似,但master 分支具有free 版本没有的一些额外应用程序功能,因此我们需要保持这两个分支继续运行。

我们通常需要修复错误或向free 分支添加功能,完成后我们需要将其应用到master 分支。当我有这样的工作要做时,我将基于free 启动一个新分支,例如newfeature。当我完成该功能后,newfeature 有 X 次新提交。

在我将newfeature 合并回free 之前,我想知道我可以使用什么命令从newfeature 中包含的所有提交生成补丁,现在需要将其应用于master。目前,我正在这样做:

git format-patch aa99f9..e94904

据我所知,我必须实际查找分支newfeature 时的具体提交ID,以及newfeature 中的最后一次提交,这是一个拖累。我对提交 ID 不感兴趣,也不想输入它们。

我希望有一个我可以始终使用的单个命令,git 将找出我正在谈论的提交。每次都是相同的模式:给定分支newfeature,我想生成从newfeaturefree共同祖先到@@上的最新提交的提交补丁987654342@.

是否有一些变更集表达式可以避免手动查找提交 ID 的需要?

P.S.: AFAIK,我不能使用git rebase 来执行此任务,因为这会将整个free 分支合并到master。我只想将newfeature 分支独有的提交合并到master

【问题讨论】:

  • 我相信您正在寻找git merge-base。参见,例如,stackoverflow.com/questions/1527234/… 以了解合并基础查找和使用的复杂版本,但简单的A...B 可能适用于您的许多情况。

标签: git branch patch format-patch


【解决方案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

听起来确实不错,但您的工作流程可以通过简单地基于免费并将免费功能合并到高级分支来改进。

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 2014-02-22
    • 1970-01-01
    • 2011-01-28
    • 2019-03-23
    • 2011-10-03
    • 2014-10-10
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多