我应该Git Merge发展成为主人,然后在标记之后回来吗?

时间:2012-02-05 18:24:52

标签: git git-branch master git-describe

问题是:在将git describe合并到develop并标记为master

之后,如何在master?上获得正确的版本(与master一起显示)

我使用常见的git分支 - git describe进行制作。假设1.5master,上显示develop,,并且在与master 1.5-234-g1e894af合并后显示git tag -a 1.6。 因此,我使用git describe master创建了一个新的带注释的标记,因此1.6现在显示git describe develop

但是:1.5-something仍显示master,这对我来说很奇怪 - 它与1.5中的提交相同 - 为什么Git认为它仍然属于1.6-2-...版本?

没有更好的东西进入我的大脑,所以我只是将master合并到develop中,然后开发显示版本{{1}}这是可以接受的,但产生了1个无用的合并提交,并警告我“通过递归合并”我认为这样做没有意义,但是如何实现正确的版本呢?

2 个答案:

答案 0 :(得分:3)

听起来你使用git有点不对劲。如果您要将develop合并到master,但永远不会master合并到develop,那么master可以自由分歧 - master上的任何更改都将永远不会进入develop分支。因此,您声明他们具有相同的提交是错误的。使用VonC的图表,

m(1.5)--m1--m2--m(1.6, master)
 \              / 
  d-------d----d (develop)

我标记为“m1”和“m2”的提交永远不会进入“开发”状态。如果没有这样的提交 - 你没有在master上工作 - 那么当你将develop合并为master时,它应该是一个快速合并;然后他们拥有相同的提交,并且一切都会像你所描述的那样工作。

当然,解决方案取决于您尝试实现的工作流程。

  • 就个人而言,我现在要么从master中删除并重新创建develop分支,要么将其快进到1.6,这样当你继续{{1}时你有这个结构:

    develop

    然后m(1.5)--m1--m2---m(1.6, master) \ / \ d-------d----d d--d (develop) 会认为它实际上是基于1.6。

  • 如果您的意图是git describe是一个连续的开发分支,develop是偶尔的“发布”分支,那么您应该避免创建任何提交,如m1和m2;就你而言,master 准确地告诉你某些事情是不同的

我不是团队中使用git的专家,所以要把这一切都拿出来。

答案 1 :(得分:1)

考虑git describe是关于"找到可以从提交中找到的最新标记",git describe上的develop可以回到master {1}}在您的新1.6代码尚未设置的提交中。{/ p>

m(1.5)--m--m--m(1.6, master)
 \            / 
  d-------d--d (develop)          => git describe develop will return 1.5-xxx

合并大师后开发

m(1.5)--m--m--m(1.6, master)
 \            / \
  d-------d--d---d (develop)      => git describe develop will return 1.6-xxx

如果其他贡献者不在develop上工作,您可以在develop之上考虑rebasing master分支,以便取回您期望的代码。 (git rebase

m(1.5)--m--m--m(1.6, master)
               \            
                d--d--d (develop) => git describe develop will return 1.6-xxx