简化版:
如果我有一个名为“foo-555”的分支,其中包含以下提交消息:
- foo 555: blah
- foo 123: blah blah
- foo 555: blah blah blah
- foo 321: blahblah
并且我想删除所有不以“foo 555:”开头的提交,是否可以使用git filter-branch(或任何其他工具)来完成?
详细版:
在我们的代码库中,每个提交消息都以某种模式开头:
Redmine #555: SOME_MESSAGE
我们还会经常进行一些变基操作,将可能的发布分支更改合并到特定问题分支。换句话说,我可能有一个名为“foo-555”的分支,但在合并到“预发布”分支之前,我需要获取“预发布”中存在而“foo-555”不存在的任何提交(以便“foo-555”可以快进合并到“预发布”)。
然而,由于“预发布”有时会发生变化,因此有时会出现这样的情况:您引入了来自“预发布”的提交,但稍后该提交会从“预发布”中删除。很容易识别出来来自“预发布”的提交,因为它们的提交消息中的号码不会与分支号码匹配。例如,如果我在“foo-555”分支中看到“Redmine #123: …”,那么我知道这不是我的分支的提交。
现在的问题是:我想删除所有“不属于”分支的提交;换句话说,任何具有以下特征的提交:
- 在我的“foo-555”分支中,但不在“预发布”分支中(pre-release..foo-555)
- 其提交消息不以“Redmine #555”开头