在我们的项目中,我们使用 GIT 作为 SCM。像往常一样,我们为新功能、复杂的错误修复、下一个版本等创建单独的分支。当(例如)新功能完全实现时,它们会合并到 master 中,这是我们的“下一个版本”分支(并合并到主干并在以后的测试/部署期间生效)。因此,在将新功能分支合并到 master 之后,它就“死了”。目前我删除了“死”分支以保持分支列表小而清晰。但正如我在上次删除时注意到的那样,我这样做是以丢失分支历史为代价的。
我现在的问题是:处理“死”分支的最佳方法是什么?
在我们的项目中,我们使用 GIT 作为 SCM。像往常一样,我们为新功能、复杂的错误修复、下一个版本等创建单独的分支。当(例如)新功能完全实现时,它们会合并到 master 中,这是我们的“下一个版本”分支(并合并到主干并在以后的测试/部署期间生效)。因此,在将新功能分支合并到 master 之后,它就“死了”。目前我删除了“死”分支以保持分支列表小而清晰。但正如我在上次删除时注意到的那样,我这样做是以丢失分支历史为代价的。
我现在的问题是:处理“死”分支的最佳方法是什么?
我会说已合并到 master 的分支,即由
git branch --merged
可以而且应该安全地删除
git branch -d <merged_branch>
git push --delete origin <merged_branch>
Git 的要点之一是创建(和合并)分支非常容易。您应该“尽早并经常分支”。但是让所有那些旧的已删除分支到处乱扔是很麻烦的。重要的历史信息在提交及其相互关系中。
请记住,合并提交的自动生成消息包含分支的名称。因此,确定原始分支名称通常没有问题(如果它包含一些有趣的信息)。
没有合并的分支是另外一回事:
git branch --no-merged
它们不能用 删除-d
,但必须用 删除-D
,所以很难误操作。就个人而言,我最终也删除了这些,但我等待的时间更长。
有时我喜欢复制一个分支,这样我就可以在合并到 master 之前压缩提交。这意味着 master 分支将有更少的提交并且历史更简单。
然后,我将删除压扁的分支并保留原始分支,以便在本地计算机上存储更详细的历史记录。在这一点上,我建议将分支标记为不需要合并到 master 上(合并不会有任何效果)。
git tag -a s1 -m "this branch was squash into <squash commit> on master"
Mercurial 允许您将分支标记为已死,以便它们无法合并到主分支上。