使用 git push --tags 或不指定 refspec 的区别
Difference between specifying refspec with git push --tags or not
我偶然发现了这个相当晦涩的问题,使用 git push --tags
和 git push --tags origin master
这两个命令将标签推送到远程。它们在以下情况下的行为不同:
初始情况
我正在尝试将一个新创建的标签 (git tag test
) 推送到一个提前提交的远程仓库,因为其他人向它推送了一个提交,而我没有提取最新的更改。如图所示:
Remote [master] (one commit ahead):
A ----- B ----- C ---- D
Local [master] (one commit behind):
A ----- B ----- C
(tag:test)
问题
git push --tags
正在按预期工作:
Total 0 (delta 0), reused 0 (delta 0)
To https://remote.gitrepo.com/path/to/project
* [new tag] test14 -> test14
git push --tags origin master
被拒绝并出现错误:
Total 0 (delta 0), reused 0 (delta 0)
To https://remote.gitrepo.com/path/to/project
* [new tag] test15 -> test15
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://remote.gitrepo.com/path/to/project'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
问题
为什么 git push --tags origin master
试图将某些东西从标签中推开?
我问的是为什么命令试图将分支推送到远程而不是为什么它被拒绝
I am asking why the command is trying to push the branch to the remote and not why it is being rejected,
因为git push 将推送新提交和(使用--tags)新标签。
- C 已经被推送所以没有什么可推送的
- 新标签已推送。
在你的第二种情况下,你试图将远程主分支(位于 D)重置为 C(除了推送标签)。
我偶然发现了这个相当晦涩的问题,使用 git push --tags
和 git push --tags origin master
这两个命令将标签推送到远程。它们在以下情况下的行为不同:
初始情况
我正在尝试将一个新创建的标签 (git tag test
) 推送到一个提前提交的远程仓库,因为其他人向它推送了一个提交,而我没有提取最新的更改。如图所示:
Remote [master] (one commit ahead):
A ----- B ----- C ---- D
Local [master] (one commit behind):
A ----- B ----- C
(tag:test)
问题
git push --tags
正在按预期工作:
Total 0 (delta 0), reused 0 (delta 0)
To https://remote.gitrepo.com/path/to/project
* [new tag] test14 -> test14
git push --tags origin master
被拒绝并出现错误:
Total 0 (delta 0), reused 0 (delta 0)
To https://remote.gitrepo.com/path/to/project
* [new tag] test15 -> test15
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://remote.gitrepo.com/path/to/project'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
问题
为什么 git push --tags origin master
试图将某些东西从标签中推开?
我问的是为什么命令试图将分支推送到远程而不是为什么它被拒绝
I am asking why the command is trying to push the branch to the remote and not why it is being rejected,
因为git push 将推送新提交和(使用--tags)新标签。
- C 已经被推送所以没有什么可推送的
- 新标签已推送。
在你的第二种情况下,你试图将远程主分支(位于 D)重置为 C(除了推送标签)。