仅限git push tag并提交差异

时间:2018-01-30 10:44:22

标签: 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 - 我只推标签,没有提交(这怎么可能?)
它在Repository(在BitBucket站点上)可见,就像正常提交一样 - 带有注释和ID。但是,无法通过git pull从bitbutcket下载提交,因为它声明它是最新的

我有感觉它看起来像是 git push origin = git push origin
git push origin 1.0.0 = git push some-special-place

它究竟是如何运作的?我可以看到BitBucket网站上的所有更改。

此外,我可以下载提交的标签而不提交chnages和结果我得到的是最新的通常提交。如果我使用API​​ / Site下载repo副本,可能会导致问题,因为它与实际更改不一致

编辑 如果我的本地提交是A-B-C-D(tag)而远程是A-B-C,那么BitBucket界面会显示我(仅在提交标记后)A-B-C-D和并未声明HEAD位于C而不是D。这就是我认为我下载的最新提交,但实际上我下载的是HEAD
另外,要注意:从远程删除标记中移除标记 uncommited 提交 - 就像它们从未出现过一样。

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

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

2 个答案:

答案 0 :(得分:5)

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

tag只是提交的指针。你不能在没有按下它指向的提交的情况下引用标记(push,检查它或其他)。 git push origin <tag>将推送提交以及指向它的标记。

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

但是,您可以在其他计算机上签出提交,因为它已经被提取。但是,除非您执行了git pull --tags

,否则您无法通过代码执行此操作

基线:

  • git push origin <tag>会推送提交和代码,但不会更改跟踪的分支HEAD
  • git push origin <branch>推送新提交并更新远程分支“HEAD,但不推送代码
  • git push origin(没有标记或分支)将默认推送当前分支。见git push documentation(由@Melebius提供)
  

此外,我可以下载提交的标签,而无需提交chnages和   结果我得到的是最新通常提交。哪会导致问题   如果我使用API​​ / Site下载repo副本,因为它没有对齐   真正的变化

我不明白你问题的这一部分,也许你可以详细说明。你是什​​么意思normally commited

答案 1 :(得分:-2)

您对该命令的理解是不正确的。

git push origin

它没有推动变化,没有git这样做。 它确实“比较了从远程分支跟踪来自原点的所有分支,并推动每个分支都在前面”

它由一个如何选择推送分支的设置来控制。

默认情况下,跳过标签。