git 仅推送标签并提交差异
git push tag only and commit difference
我有一个小问题。最近开始使用 gitKraken 来测试它是如何工作的(考虑从 sourcetree 移动)。据我了解,它更像是 "raw" git 命令。 SourceTree 为我做一些事情,比如自动标签推送(好的,发现它允许不推荐的 --tags
选项)
我的问题是标签。我在console上测试了一下,好像和push 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/Site 下载回购副本,这可能会导致问题,因为它与实际更改不一致
EDIT 如果我的本地提交是 A-B-C-D(tag)
而远程是 A-B-C
那么 BitBucket 界面会显示我(仅在提交标签之后) A-B-C-D
并没有说明 HEAD
在 C
而不是 D
。这就是我认为我下载了最新提交的内容,但实际上我下载的是 HEAD
另外,要注意: Removing tag from remote removie uncommited commits - 就好像它们一开始就不存在一样地点.
GitKraken 和源代码树都不会通知未提交的更改。
编辑:仅提交标签会在 Web 界面中显示实际更改(补丁摘要)。 Commit 看起来和真的一样。
我认为您在这里混淆了提交、分支和标记的概念。
A 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 提供)
Moreover I can download commited tag without commiting chnages and
result I get is latest normally commited. Which can lead to problems
in case I use API/Site to download repo copy, as it is not aligned
with real changes
你的这部分问题我不太明白,也许你可以详细说明一下。 normally commited
是什么意思?
你对命令的理解有误
git push origin
它没有推送更改,没有 git 那样做。
它 "compare all the branches whose are tracking from remote branches from origin, and do a push for each branch are ahead"
它由如何选择要推送的分支的设置控制。
默认情况下,跳过标签。
我有一个小问题。最近开始使用 gitKraken 来测试它是如何工作的(考虑从 sourcetree 移动)。据我了解,它更像是 "raw" git 命令。 SourceTree 为我做一些事情,比如自动标签推送(好的,发现它允许不推荐的 --tags
选项)
我的问题是标签。我在console上测试了一下,好像和push 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/Site 下载回购副本,这可能会导致问题,因为它与实际更改不一致
EDIT 如果我的本地提交是 A-B-C-D(tag)
而远程是 A-B-C
那么 BitBucket 界面会显示我(仅在提交标签之后) A-B-C-D
并没有说明 HEAD
在 C
而不是 D
。这就是我认为我下载了最新提交的内容,但实际上我下载的是 HEAD
另外,要注意: Removing tag from remote removie uncommited commits - 就好像它们一开始就不存在一样地点.
GitKraken 和源代码树都不会通知未提交的更改。
编辑:仅提交标签会在 Web 界面中显示实际更改(补丁摘要)。 Commit 看起来和真的一样。
我认为您在这里混淆了提交、分支和标记的概念。
A 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 提供)
Moreover I can download commited tag without commiting chnages and result I get is latest normally commited. Which can lead to problems in case I use API/Site to download repo copy, as it is not aligned with real changes
你的这部分问题我不太明白,也许你可以详细说明一下。 normally commited
是什么意思?
你对命令的理解有误
git push origin
它没有推送更改,没有 git 那样做。 它 "compare all the branches whose are tracking from remote branches from origin, and do a push for each branch are ahead"
它由如何选择要推送的分支的设置控制。
默认情况下,跳过标签。