Git:有没有办法推送只由标签持有的提交,而无需推送标签?

时间:2017-10-18 00:07:13

标签: git git-push git-tag

情境:

  1. 创建tmp分支

  2. 提交一些临时更改

  3. 标记提交tmptag

    x-x-x-y-y  <- master
         \
          z  <- tmp [tmptag]
    
  4. 删除tmp分支

    x-x-x-y-y  <- master
         \
          z  <- [tmptag]
    
  5. 现在我有一个提交,z仅由标记tmptag持有。

    我理解,如果您将tmptag推送到远程(通过名称或推送所有标签),也会推送提交z

    问题:

    1. 还有其他命令会将z推送到遥控器吗?

    2. 另外,如果我特意推送所有分支机构,z推送,对吧?

1 个答案:

答案 0 :(得分:3)

  1. 是的,任何说要求其他Git请设置一些名称以指向ID为z 的提交将转移提交z。例如:

    git push $(git rev-parse tmptag^{}):refs/heads/newbranch
    

    会要求其他Git创建指向标记提交的分支newbranch。 (当且仅当^{}是带注释的标记时,才需要tmptag后缀。)您还可以使用原始哈希ID和分支名称以外的其他内容,前提是其他Git允许您推送参考。

  2. 正确:由于无法从分支名称访问z,因此不会发送(至少通常 1 )。

  3. 1 每个Git传输负责收集发送和发送它们的对象,如果某些传输是奇怪的或粗心的,它可以收集提交z并发送它。内置推送传输(通常使用git send-pack调用--thin)不会这样做,但考虑一个z是包中的基础对象并且有些已经解决的情况很有意思同一包中的对象也需要发送。