我有一个使用GitFlow的 git 存储库(即,它有master
、develop
、release-*
和feature-*
分支)。然而,合作者并没有使用显式合并(即git merge --no-ff
),因此 eggit log --first-parent
没有提供迄今为止的合并历史的简单汇总。
展望未来,合作者将使用显式合并。但是,在他们这样做之前,我想确保历史记录是“干净的”,以便在调用git log --first-parent
. 但是,显然,我想在调用 unfiltered 时保持实际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
没有先前历史的新 ( ) 分支 - (可选)从工作树中删除所有文件,这样我们就不会重新提交它们
- 建立一个初始提交,以便我们有一些东西可以合并到
- 从分支执行显式合并(即, ) ,确认不相关的历史
--no-ff
develop
- 快进
develop
到我们刚刚执行的显式合并,以便表示历史
我的问题:在将其应用于生产环境之前,我应该了解这种方法的后果吗?是否有替代或更简单的方法更适合完成此类场景?
(在测试中,这似乎实现了我的目标,并且对现有分支或工作流程没有不利影响。但是,使用 git,我总是对我不知道我不知道的事情保持警惕。)