【发布时间】:2019-12-28 00:06:56
【问题描述】:
我有一个使用 GitFlow 的 git 存储库(即,它有 master、develop、release-* 和 feature-* 分支)。然而,协作者并没有使用显式合并(即git merge --no-ff),等等。 git log --first-parent 不提供迄今为止合并历史的简单汇总。
接下来,合作者将使用显式合并。但是,在他们这样做之前,我想确保历史记录是“干净的”,以便在调用 git log --first-parent 时不会显示以前的历史记录。但是,显然,我想在调用未过滤的git log 时保持实际 提交历史。
我倾向于做以下事情:
$ git checkout develop
$ git checkout --orphan CleanSlate
$ git rm . -r -f
$ git commit --allow-empty -m "Establish a clean slate for the develop branch"
$ git merge --no-ff --allow-unrelated-histories develop -m "Introduce all legacy files"
$ git checkout develop
$ git merge CleanSlate
基本上,我们的想法是:
- 建立一个没有先前历史的新 (
--orphan) 分支 - (可选)从工作树中删除所有文件,这样我们就不会重新提交它们
- 建立一个初始提交,以便我们可以合并一些内容
- 从
develop分支执行显式合并(即--no-ff),确认不相关的历史记录 - 快进
develop到我们刚刚执行的显式合并,它代表了历史
我的问题:在将这种方法应用到生产环境之前,我应该注意哪些后果?是否有替代或更简单的方法更适合完成此类场景?
(在测试中,这似乎实现了我的目标,并且对现有分支或工作流程没有不利影响。但是,使用 git,我总是对我不知道我不知道的事情保持警惕。)
【问题讨论】:
标签: git git-merge git-flow git-history