当我尝试将所有分支和标签推送到远程时,Git 会发出以下错误:
# git push origin --all --tags
fatal: --all and --tags are incompatible
然而,这是可以正常工作的:
# git push origin refs/heads refs/tags
Everything up-to-date
问题:
为什么 git 命名 push-all-branches 选项为
--all
而不是--branches
或者--heads
?执行git push origin --all
只推送分支,而不是所有引用。这种命名背后的哲学是什么?这是否意味着标签在 Git 存储库中真的是二等公民?为什么 Git 不允许同时使用
--all
和--tags
选项?
PS. 我知道有一个 --follow-tags
选项。我知道有些人不建议推送所有标签,但本主题与此无关。
man git-push
:
--all
推送所有分支(即 refs/heads/ 下的引用);不能与其它 <refspec> 一起使用。
--tags
除了显式列出在命令行上的 refspecs 外,还会推送 refs/tags 下的所有引用。
--all
不能与--tags
一起使用。没有任何原因,只是在很久以前有人编写了这个代码,现在它就是这样运行的。 - torekgit push origin refs/heads refs/tags
,但它确实很方便,所以我点了个赞。 - Romain Valerigit push --all
意味着所有分支,由于Git的开发人员不愿意改变参数的含义,我们就被困在了这个问题上。这是相当不一致的,但是git rm --cached
与git diff --staged
也是如此。他们最终确实改变了git add -A
,所以如果你开始一场运动,也许Git 3.0或4.0会有一些更明智的选项。 - torek