问题是:在将git describe
合并到develop
并标记为master
master?
上获得正确的版本(与master
一起显示)
我使用常见的git分支 - git describe
进行制作。假设1.5
在master,
上显示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个无用的合并提交,并警告我“通过递归合并”我认为这样做没有意义,但是如何实现正确的版本呢?
答案 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