我对标记感到非常困惑,需要澄清一些事情。对于源代码管理,我喜欢使用' gitflow'流程。我通常会在开发过程中创建功能分支,一旦完成,我就会合并回到开发阶段,然后在发布周期中,发布分支将从开发中脱离出来并最终进入master。合并到master后,我用版本号标记顶部提交。
想象一下以下场景:
主分支的标签为' v1.0',其中包含来自develop的所有最新代码。另一个团队成员推动了他已经工作了几个星期的分支机构。其中一些分支提交标记的创建日期之前的日期。最终,使用这些旧提交创建了一个发布分支,并通过合并进入master。如果我查看git历史记录,我可以在主分支日志中进一步查看旧提交。
如果我现在将顶部提交(合并提交)标记为' v1.1',这将离开我的项目?如果我签出标签' v1.0'它现在会包括旧的提交,因为它们会在历史中进一步回归吗?我标记的原因是我可以在必要时在版本之间来回跳转,但是如果旧的提交会在工作中投入扳手,我不知道该怎么做!
答案 0 :(得分:1)
我今天自己问了这个问题,所以我读了一些文档并做了一些测试提交。
查看我的测试存储库https://github.com/pixelbrackets/hello-github-world/
我在»version.txt«中做了九次提交,在文件中添加了连续的数字:
问题是:在他们合并回主人之后,第四步的两个提前提交会发生什么?
好吧,正如Oliver Charlesworth在上面的评论中已经解释过的那样,这些提交并没有通过日期联系起来。重要的是拓扑秩序。 但是,当您查看git日志时,默认情况下会以反向时间顺序显示提交。这可能会导致这种令人困惑的情况。
要以拓扑顺序查看git历史记录,您可以使用图形工具,如»gitg«或在命令行上键入»git log --topo-order --graph«。
这是我的测试提交的截图,用»gitg«:
制作
正如您在右栏中看到的,所有提交都是连续的。但是,尽管我删除了功能分支,但图表仍清楚地显示提交3,4,7,8(步骤4和9)是分开进行的。标签名称显示在相应的提交旁边。
当我签出第二个标签时,不包括第四步的提交。
$ git checkout 0.1.0
HEAD is now at d76c450... Commit 2 Master 2
$ cat version.txt
1
2
$ git checkout 0.2.0
HEAD is now at 3eeec86... Commit 6 Master 4
$ cat version.txt
1
2
5
6
$ git checkout 0.3.0
HEAD is now at 699c6f1... Fix Merge Conflict
$ cat version.txt
1
2
3
4
5
6
7
所以,不,git标签不会包含先前创建的提交并在后续日期合并到分支中。您可以将标记用作发布版本,就像您期望它们一样。