带有压缩提交的 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 发布分支的主要内容,如果未能解决你的问题,请参考以下文章
pip 意外没有安装带有分支/提交固定的最新版本的 git 包