git - Git 发布合并策略
问题描述
在我们的项目中,我们有 3 个分支master
,release
和production
。master
我们的开发分支在哪里。这个想法是release
分支不是持久的。即它将被创建用于发布并在发布合并到production
分支后删除。
在 sprint 结束时,我们创建一个release
基于的新分支,master
并让团队 PR 审查该release
分支以获得批准。
但是,在批准期间,某些提交master
(现在也在release
分支上)可能实际上不应该合并到production
分支中。
例如,已在以下提交master
:
commit-1
commit-2
commit-3
创建release
分支后,我们在分支上有相同的提交,release
但可能commit-2
还不应该发布。
commit-1
commit-2 <- remove for the 'release` branch
commit-3
如何commit-2
安全地从release
分支中删除,但仍保留在master
分支上以在将来的版本中合并?
解决方案
这是git revert
为了什么。commit-2
只需直接在 上还原release
,以否定它。实际上,您创建了一个新提交,其唯一目的是撤消现有提交的影响。
否定提交只出现在release
所以它只影响release
. 这在历史上也很好;您实际上是在用您的历史描述形成此版本的程序。
小例子。我首先创建您的三个提交(在 master 上):
$ echo a > a.txt
$ git add .; git commit -ma
$ echo b > b.txt
$ git add .; git commit -mb
$ echo c > c.txt
$ git add .; git commit -mc
现在我创建发布分支。意识到提交b
不应该是这个版本的一部分,我通过恢复它来抑制它:
$ git branch release
$ git switch release
$ git revert 883ae
Removing b.txt
情况如下:
$ git log --oneline --graph --all
* 022f96f (HEAD -> release) Revert "b"
* 6a6acfe (master) c
* 883ae8f b
* a186a8a a
好的。在发布时,我们的文件看起来如何:
$ ls
a.txt c.txt
如您所见,883ae8f
创建的效果b.txt
已从发布分支中删除。但与此同时,主人不受影响:
$ git switch master
Switched to branch 'master'
$ ls
a.txt b.txt c.txt
推荐阅读
- android - Flutter Riverpod 提供程序未在 UI 中更新状态
- android - 在构建时将变量传递到 Android 中的 externalNativeBuild
- drag-and-drop - ASP.NET/VB Telerik RadTreeList 拖放值赋值
- php - Laravel,如何从自定义表的 jwt 令牌中获取登录用户
- c - 在 C 中交换两个结构(动态内存分配)
- c - 访问超出最初声明的指针的内存
- python - Python - TypeError: __init__() 接受 3 个位置参数,但给出了 4 个
- git - 为什么 git bisect 为我提供了一个相当古老的提交?
- python - 为什么 subprocess 在 shell 脚本中使用时返回双“\”(例如“1\\n2”)?
- reactjs - 反应路由器在实时站点上的某些页面上不起作用