在我们的项目中,我们有3个分支,master,release和production。其中master是我们的开发分支。这个想法是release分支不是持久的。也就是说,它将被创建用于发布,并在发布合并到production分支后被删除。
在sprint的末尾,我们基于master创建了一个新的release分支,并让团队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分支中,以便在未来的版本中合并?
发布于 2021-03-21 07:48:12
这就是git revert的用途。只需在release上直接恢复commit-2,就可以取消它。实际上,您已经创建了一个新的提交,其唯一目的是撤消现有提交的效果。
否定commit只出现在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现在我创建了release分支。意识到提交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正如您所看到的,创建b.txt的883ae8f的效果已经从release分支中删除。但同时,师父并未受到影响:
$ git switch master
Switched to branch 'master'
$ ls
a.txt b.txt c.txthttps://stackoverflow.com/questions/66727538
复制相似问题