我有小问题。最近开始使用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
另外,要注意:从远程删除标记中移除标记 em> uncommited 提交 - 就像它们从未出现过一样。
GitKraken和源代码树不会通知未提交的更改。
编辑:仅提交标记会在Web界面中显示实际更改(修补程序摘要)。提交看起来完全一样。
答案 0 :(得分:5)
我认为你在这里混淆了提交,分支和标签的概念。
tag
只是提交的指针。你不能在没有按下它指向的提交的情况下引用标记(push
,检查它或其他)。 git push origin <tag>
将推送提交以及指向它的标记。
pull
现在是git fetch
和git 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这样做。 它确实“比较了从远程分支跟踪来自原点的所有分支,并推动每个分支都在前面”
它由一个如何选择推送分支的设置来控制。
默认情况下,跳过标签。