首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git发布合并策略

Git发布合并策略
EN

Stack Overflow用户
提问于 2021-03-21 07:42:44
回答 1查看 44关注 0票数 0

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

在sprint的末尾,我们基于master创建了一个新的release分支,并让团队PR审查这个release分支以获得批准。

然而,在审批期间,在master上进行的一些提交(现在也在release分支上)实际上不应该合并到production分支中。

例如,已经在master上进行了以下提交

代码语言:javascript
复制
commit-1
commit-2
commit-3

在创建了release分支之后,我们在release分支上有了相同的提交,但也许commit-2还不应该发布。

代码语言:javascript
复制
commit-1
commit-2  <- remove for the 'release` branch
commit-3

如何安全地将commit-2release分支中删除,但仍然保留在master分支中,以便在未来的版本中合并?

EN

回答 1

Stack Overflow用户

发布于 2021-03-21 07:48:12

这就是git revert的用途。只需在release上直接恢复commit-2,就可以取消它。实际上,您已经创建了一个新的提交,其唯一目的是撤消现有提交的效果。

否定commit只出现在release上,因此它只影响release。这在历史上也很好;您实际上是在用您的历史来描述形成此版本的过程。

一个小例子。我首先创建三个提交(在master上):

代码语言:javascript
复制
$ 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

现在我创建了release分支。意识到提交b不应该是此版本的一部分,我通过恢复它来抑制它:

代码语言:javascript
复制
$ git branch release
$ git switch release
$ git revert 883ae
Removing b.txt

情况是这样的:

代码语言:javascript
复制
$ git log --oneline --graph --all
* 022f96f (HEAD -> release) Revert "b"
* 6a6acfe (master) c
* 883ae8f b
* a186a8a a

好的。在发布时,我们的文件看起来是什么样子:

代码语言:javascript
复制
$ ls
a.txt   c.txt

正如您所看到的,创建b.txt883ae8f的效果已经从release分支中删除。但同时,师父并未受到影响:

代码语言:javascript
复制
$ git switch master
Switched to branch 'master'
$ ls
a.txt   b.txt   c.txt
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66727538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档