我偶然发现了一个相当模糊的问题,即使用两个命令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
试图将某些东西从标签中推开?
我在问为什么命令试图将分支推送到远程,而不是为什么它被拒绝
答案 0 :(得分:1)
我问的是为什么命令试图将分支推送到远程,而不是为什么它被拒绝,
因为git push将推送新的提交和(带有--tags的)新标签。
在第二种情况下,您尝试将远程主分支(位于D处)重置为C(除了推送标记)。