Git分支策略-拉取请求创建合并提交,这些合并提交使分支在文件相等时看起来不同

问题描述 投票:2回答:1

在我当前的项目中,我们有三个分支; masterdevhotfix

[当要实现新功能时,开发人员将从feature_branch创建新的master。当功能准备好进行检查和测试时,开发人员将创建拉取请求,以将feature_branch合并为dev。合并后,将构建和部署开发和测试环境(从dev分支)。在这种环境下,将进行一些测试和质量检查。

一旦测试完成,开发人员将打开从feature_branchmaster的提取请求。合并到master后,将开始构建和部署到阶段并进行生产。

这很好,唯一的问题是,拉请求合并所进行的不同合并提交使合并看起来不同。在Azure DevOps(这是我们的DevOps环境)的分支视图中,dev分支似乎比compare分支(即master分支)晚1个提交,比该分支更早1个提交。这是因为dev分支具有master分支不具有的提交(从feature_branchdev的合并PR),并且缺少master分支具有的提交([feature_branch的合并PR C0]转换为master)。

是否有一种很好的方法可以使devmaster分支在此处显得相等?

这三个分支背后的想法是,如果存在错误,我们可以从bugfix_branch分支中创建一个master,并打开从bugfix_branchhotfix分支中的拉取请求。合并到hotfix分支将构建并部署一个测试环境,在该环境中可以单独测试错误修复。错误修复程序获得批准后,开发人员将打开从bugfix_branchmaster的提取请求。

hotfix分支也将看起来与devmaster不同。

提前感谢您的帮助。

git pull-request branching-and-merging
1个回答
2
投票

假设以下历史记录:

* 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
© www.soinside.com 2019 - 2024. All rights reserved.