在我当前的项目中,我们有三个分支; master
,dev
和hotfix
。
[当要实现新功能时,开发人员将从feature_branch
创建新的master
。当功能准备好进行检查和测试时,开发人员将创建拉取请求,以将feature_branch
合并为dev
。合并后,将构建和部署开发和测试环境(从dev
分支)。在这种环境下,将进行一些测试和质量检查。
一旦测试完成,开发人员将打开从feature_branch
到master
的提取请求。合并到master
后,将开始构建和部署到阶段并进行生产。
这很好,唯一的问题是,拉请求合并所进行的不同合并提交使合并看起来不同。在Azure DevOps(这是我们的DevOps环境)的分支视图中,dev
分支似乎比compare分支(即master
分支)晚1个提交,比该分支更早1个提交。这是因为dev
分支具有master分支不具有的提交(从feature_branch
到dev
的合并PR),并且缺少master
分支具有的提交([feature_branch
的合并PR C0]转换为master
)。
是否有一种很好的方法可以使dev
和master
分支在此处显得相等?
这三个分支背后的想法是,如果存在错误,我们可以从bugfix_branch
分支中创建一个master
,并打开从bugfix_branch
到hotfix
分支中的拉取请求。合并到hotfix
分支将构建并部署一个测试环境,在该环境中可以单独测试错误修复。错误修复程序获得批准后,开发人员将打开从bugfix_branch
到master
的提取请求。
hotfix
分支也将看起来与dev
和master
不同。
提前感谢您的帮助。
假设以下历史记录:
* 99a48ee (feature_branch) Add feature a
* 499665a (HEAD -> dev, master) Initial commit
从feature_branch到开发人员的合并将创建合并提交:
git merge --no-ff feature_branch
* 8aa6422 (HEAD -> dev) Merge branch 'feature_branch' into dev
|\
| * 99a48ee (feature_branch) Add feature a
|/
* 499665a (master) Initial commit
测试完成后,开发人员将打开一个从Feature_branch到主节点的拉取请求。
这是非常规的部分。您将得到以下结果:
git checkout master
git merge --no-ff feature_branch
* 9a3f2e7 (HEAD -> master) Merge branch 'feature_branch'
|\
| | * 8aa6422 (dev) Merge branch 'feature_branch' into dev
| | |\
| |/ /
|/| /
| |/
| * 99a48ee (feature_branch) Add feature a
|/
* 499665a Initial commit
这已经看起来不对劲! dev
现在为[ahead 1, behind 1]
,因为它包含8aa6422且缺少9a3f2e7。
dev 8aa6422 [ahead 1, behind 1] Merge branch 'feature_branch' into dev
feature_branch 99a48ee [behind 1] Add feature a
* master 9a3f2e7 Merge branch 'feature_branch'
而不是将功能分支合并到master中,应该将dev合并到master中。在上面的最新合并之前,让我们尝试使用存储库的状态。
git reset --hard HEAD^ # rollback the merge we just did above
git merge --no-ff dev
* c59be01 (HEAD -> master) Merge branch 'dev'
|\
| * 8aa6422 (dev) Merge branch 'feature_branch' into dev
| |\
|/ /
| * 99a48ee (feature_branch) Add feature a
|/
* 499665a Initial commit
看起来更好,没有重叠的线条! dev
不再同时位于前面和后面,而是位于后面,因为它没有要控制的合并。
dev 8aa6422 [behind 1] Merge branch 'feature_branch' into dev
feature_branch 99a48ee [behind 2] Add feature a
* master c59be01 Merge branch 'dev'
它们不是相同的,但是它们只是在后面,所以如果您做相同的事情,将来会干净地合并。
如果您确实希望它们相同,则需要快速向前合并,而不是创建合并提交。让我们再次快退,看看是什么样子:
git reset --hard HEAD^ # rollback again
git merge dev # without --no-ff will default to --ff (fast forward)
* 8aa6422 (HEAD -> master, dev) Merge branch 'feature_branch' into dev
|\
| * 99a48ee (feature_branch) Add feature a
|/
* 499665a Initial commit
现在大师和开发者完全相同!
dev 8aa6422 Merge branch 'feature_branch' into dev
feature_branch 99a48ee [behind 1] Add feature a
* master 8aa6422 Merge branch 'feature_branch' into dev