生成包含来自历史分支的所有提交的补丁,仅使用分支名称

时间:2016-10-06 04:15:10

标签: git git-branch patch branching-and-merging

我们在将功能分支合并到主服务器后删除功能分支。有时,我们需要生成一个补丁,其中包含来自不再存在的历史分支的所有提交。

为简化流程,我想提供一个生成此类补丁的脚本,只需要历史分支名称作为输入。

(可以从错误跟踪系统轻松获取分支名称)

1 个答案:

答案 0 :(得分:1)

git中的分支只是文件中的一行文本,指向提交。删除分支时,reflog中没有任何历史记录。我建议在合并它们之前标记发布分支的末尾,这样您就可以浏览标记列表,当您需要从以前发布的代码创建补丁时,可以从中分支。

git tag -a 1.1 -m "Release 1.1"
git merge release/1.1
git branch -d release/1.1

然后,您可以使用git tag和更晚的git branch hotfix/1.2 1.1列出标记,以便从代码中创建分支。

如果您不想这样做,可以使用以下内容列出历史记录中的所有合并提交,通常包括已合并的分支名称。然后,您可以转到合并提交的第二个父级,这将是您的发布分支的最后一次提交。

git log --oneline --merges --grep="<branch name>"
git show --pretty=raw <commitId>
git branch hotfix/1.1 <commitId>^2

您可以组合这些命令并获得您要求的内容,但如上所述,我强烈建议您为此目的使用标记。