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



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

当要实现新功能时,开发人员将从master创建新feature_branch。当该功能准备好进行审查和测试时,开发人员将创建一个拉取请求以将feature_branch合并到dev中。合并后,将生成和部署开发和测试环境(从dev分支)。在这种环境中,将进行一些测试和QA。

测试完成后,开发人员将打开从feature_branchmaster的拉取请求。合并到master后,将开始构建和部署到过渡和生产。

这工作正常,唯一的问题是拉取请求合并进行的不同合并提交使分支看起来不同。在 Azure DevOps(即我们的 DevOps 环境)的分支视图中,dev分支似乎在比较分支(master分支)后面 1 个提交和 1 个提交。这是因为dev分支具有主分支没有的提交(从feature_branch合并到dev的 PR),并且缺少master分支具有的提交(从feature_branch合并的 PR 到master)。

有没有一种好方法可以让devmaster分支在这里看起来相等?

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

hotfix分支也会与devmaster不同。

提前感谢任何帮助。

假设以下历史记录:

* 99a48ee (feature_branch) Add feature a
* 499665a (HEAD -> dev, master) Initial commit

从 feature_branch 到 dev 的合并将创建一个合并提交:

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到 master 的拉取请求。

这是非常规的一点。您最终会得到以下内容:

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

最新更新