Git发布合并策略

时间:2021-03-20 23:42:44

标签: git

在我们的项目中,我们有 3 个分支,masterreleaseproduction。其中 master 是我们的开发分支。这个想法是 release 分支不是持久的。 IE。它将被创建用于发布并在发布合并到 production 分支后删除。

在冲刺结束时,我们基于 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 分支上以便在未来版本中合并?

1 个答案:

答案 0 :(得分:1)

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

如您所见,创建 883ae8fb.txt 的效果已从发布分支中删除。但与此同时,master 不受影响:

$ git switch master
Switched to branch 'master'
$ ls
a.txt   b.txt   c.txt