git push tag only和commit差异

Grz*_*orz 4 git bitbucket bitbucket-api gitkraken

我有小问题。最近开始使用gitKraken来测试它的工作方式(考虑从sourcetree迁移)。据我了解,它更像是“原始” git命令。SourceTree为我完成了一些事情,例如自动标记推送(确定,发现它允许使用不推荐的--tags选项)

我的问题是标签。我在控制台上对其进行了测试,它似乎与推送标签有关。

git push origin-推送更改
git push origin 1.0.0-推送标签
在这里,一切正常。我的同事可以看到更改并可以进行更改。

git push origin 1.0.0-我只推送标签,而不提交(这怎么可能?),
它在存储库(在BitBucket站点上)像普通的提交一样可见-带有注释和ID。但是,提交不能通过git pull从bitbutcket下载,因为它表明它是最新的

觉得它看起来像
git push origin= git push origin
git push origin 1.0.0=git push some-special-place

它是如何工作的?我可以在BitBucket网站上看​​到所有更改。

此外,我可以下载提交的标签,而无需提交更改,并且我得到的结果是最近通常提交的。如果我使用API​​ /网站下载回购副本,可能会导致问题,因为它与实际更改不符

编辑 如果我的本地提交是A-B-C-D(tag)远程的,A-B-C则BitBucket接口向我显示(仅提交标签后)A-B-C-D,并且未声明其HEADC而不是D。那就是我以为我拒绝了最新的提交,但实际上我下载的是HEAD
另外,要注意:从远程可删除
未提交的 提交中删除标签-就像它们从未放在首位一样。

GitKraken或源代码树都不会通知未提交的更改。

编辑:仅提交标签会在Web界面中显示实际更改(补丁摘要)。提交看起来完全一样。

kow*_*sky 5

我认为您在这里混淆了提交,分支和标签的概念。

A tag只是一个指向提交的指针。如果不推动标签所push指向的提交,则永远不能引用标签(标签,将其签出或进行其他操作)。git push origin <tag>将推送提交以及指向该提交的标签。

但是,它不会更改任何分支。一个pull是现在的组合git fetchgit merge。如果您从其他地方拉出,则将提取推送的提交。但是merge将跟踪的远程分支合并到本地分支中。但是,远程分支没有更改(因为您仅推送了commit和tag,但没有更改分支HEAD)。因此,up-to-date当您拉动时会显示该消息。

但是,您可以在另一台计算机上检出提交,因为它已被提取。但是,除非您执行了,否则您无法通过标记执行此操作git pull --tags

基线:

  • git push origin <tag>确实会推送提交和标签,但不会更改被跟踪分支的HEAD
  • git push origin <branch>推送新的提交并更新远程分支的HEAD,但不推送标签
  • git push origin(无标签或分支)默认情况下将推送当前分支。参见git push文档(由@Melebius提供)

此外,我可以下载提交的标签,而无需提交更改,并且我得到的结果是最近通常提交的。如果我使用API​​ /网站下载回购副本,可能会导致问题,因为它与实际更改不符

我不理解您的问题的这一部分,也许您可​​以对此进行详细说明。你是什么意思normally commited