首页 > 解决方案 > Git 发布合并策略

问题描述

在我们的项目中,我们有 3 个分支masterreleaseproductionmaster我们的开发分支在哪里。这个想法是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

解决方案


这是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

推荐阅读