带有压缩提交的 Git 发布分支

Posted

技术标签:

【中文标题】带有压缩提交的 Git 发布分支【英文标题】:Git Release Branch with Squashed Commits 【发布时间】:2012-05-26 20:08:19 【问题描述】:

我正在尝试做类似的事情:Creating GitHub repository with only a subset of a local repository's history

我目前将所有提交都放在 master 上,现在我想创建一个名为 release 的分支,该分支仅包含所有过去提交的单个提交,并且没有旧提交的历史记录。

我尝试使用该链接中的方法,但这样做会导致任何进一步合并到发布中不会自动合并,这有点烦人。 (它给出的错误是 Squash commit -- 不更新 HEAD。自动合并失败;修复冲突,然后提交结果。) 有没有其他方法可以自动合并?

我知道最简单的方法是创建一个单独的 repo,但理想情况下,我宁愿只使用一个分支。

我希望它最终看起来像这样:

v1 是提交 2 的合并,v2 是提交 5 的合并,等等。

[发布]:

v2 v1

[大师]:

提交 5 提交 4 提交 3 提交 2 初始

我是 git 新手,如果这真的很明显,我很抱歉! 谢谢!

【问题讨论】:

你的“进一步合并”怎么样? 为什么不将每个版本的 master 合并到 release 中,并使用git merge --no-ff 始终只在每个版本的发布分支中创建一个(合并)提交。 @MattiasWadman,它确实创建了一个单独的分支结构,但是当您将代码推送到 Github 时,来自 master 的先前提交仍然可见。如果我从初始创建发布分支,然后使用git merge --squash 它确实可以工作并做我想做的事情,但它仍然无法自动合并。 如果您希望发布分支的每个提交都与 master 中的树完全相同,您实际上可以在发布分支签出 git read-tree -u --reset master && git commit -m v1 时执行类似的操作。现在,发布分支中将有一个“v1”提交,指向与 master 中的顶部提交完全相同的树。 但是你有充分的理由要在主分支中隐藏提交消息吗?也许最好在 master 中 rebase 和清理你的提交,然后进行适当的合并? 【参考方案1】:

如果您想在发布分支中进行提交,该提交将与主分支中的顶部提交具有完全相同的树,您可以这样做:

# make sure we are on the release branch
git checkout release
# populate index and working tree with tree from top master commit 
git read-tree -u --reset master
# commit it as "v1"
git commit -m v1

【讨论】:

以上是关于带有压缩提交的 Git 发布分支的主要内容,如果未能解决你的问题,请参考以下文章

git rebase 压缩提交

带有分支名称的提交的 Git 别名

显示带有最后提交日期的 git 分支

pip 意外没有安装带有分支/提交固定的最新版本的 git 包

你如何使用 git format-patch 将提交压缩到一个补丁中?

Git 常用命令