Git Tagging& Gitflow:合并旧提交时会发生什么

时间:2014-11-19 09:01:35

标签: git version-control git-merge git-flow git-tag

我对标记感到非常困惑,需要澄清一些事情。对于源代码管理,我喜欢使用' gitflow'流程。我通常会在开发过程中创建功能分支,一旦完成,我就会合并回到开发阶段,然后在发布周期中,发布分支将从开发中脱离出来并最终进入master。合并到master后,我用版本号标记顶部提交。

想象一下以下场景:

主分支的标签为' v1.0',其中包含来自develop的所有最新代码。另一个团队成员推动了他已经工作了几个星期的分支机构。其中一些分支提交标记的创建日期之前的日期。最终,使用这些旧提交创建了一个发布分支,并通过合并进入master。如果我查看git历史记录,我可以在主分支日志中进一步查看旧提交。

如果我现在将顶部提交(合并提交)标记为' v1.1',这将离开我的项目?如果我签出标签' v1.0'它现在会包括旧的提交,因为它们会在历史中进一步回归吗?我标记的原因是我可以在必要时在版本之间来回跳转,但是如果旧的提交会在工作中投入扳手,我不知道该怎么做!

1 个答案:

答案 0 :(得分:1)

我今天自己问了这个问题,所以我读了一些文档并做了一些测试提交。

查看我的测试存储库https://github.com/pixelbrackets/hello-github-world/

我在»version.txt«中做了九次提交,在文件中添加了连续的数字:

  1. 主人的两次提交
  2. 标记版本0.1.0(有两次提交)
  3. 切换到功能分支
  4. 在功能分支
  5. 中创建了两个提交
  6. 切换回主人
  7. 在主
  8. 中创建了两个提交
  9. 标记发布版本0.2.0(现在有四个提交,不包括该功能)
  10. 切换回功能分支
  11. 在功能分支
  12. 中再创建了两次提交
  13. 将主服务器合并到功能分支并解决了合并冲突
  14. 将要素分支合并到主
  15. 标记版本0.3.0(有9个提交 - 4个来自master,4个来自功能分支,1个合并提交)
  16. 删除了功能分支
  17. 问题是:在他们合并回主人之后,第四步的两个提前提交会发生什么?

    好吧,正如Oliver Charlesworth在上面的评论中已经解释过的那样,这些提交并没有通过日期联系起来。重要的是拓扑秩序。 但是,当您查看git日志时,默认情况下会以反向时间顺序显示提交。这可能会导致这种令人困惑的情况。

    要以拓扑顺序查看git历史记录,您可以使用图形工具,如»gitg«或在命令行上键入»git log --topo-order --graph«。

    这是我的测试提交的截图,用»gitg«:

    制作

    Screenshot Git Tags

    正如您在右栏中看到的,所有提交都是连续的。但是,尽管我删除了功能分支,但图表仍清楚地显示提交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标签不会包含先前创建的提交并在后续日期合并到分支中。您可以将标记用作发布版本,就像您期望它们一样。