带有Git的版本控制说:
仅将refspec与源ref(即不带源ref)一起使用的按钮 目标参考)在远程存储库中创建新分支:
$ cd ~/public_html $ git checkout -b foo Switched to a new branch "foo" $ git push origin foo Total 0 (delta 0), reused 0 (delta 0) To /tmp/Depot/public_html * [new branch] foo -> foo
Git Pocket Guide 说:
如果您已添加自己的本地分支机构并希望开始共享 ,请使用-u选项让Git将您的分支添加到 远程,并以通常的方式为您的本地分支机构设置跟踪, 例如:
$ git push -u origin new-branch
完成此初始设置后,您可以仅在此分支上使用git push, 没有选项或参数,则可以推送到同一遥控器。
他们试图完成的事情之间有什么区别?
为什么第一个不使用-u
,而第二个却不使用?
谢谢。
答案 0 :(得分:3)
如果您的问题是关于 -u
的{{1}}选项 ,它是重复的:请参阅Why do I have to "git push --set-upstream origin <branch>"?和How do I push a new local branch to a remote Git repository and track it too?关于为什么2012年的书中没有包含当时没有特别必要的选项的信息。
假设您的意思是this specific book, Version Control with Git, published in August 2012,则不建议使用git push
的原因是它于2012年发布。
Git版本2.0已过时:
git push -u
您可以看到,早于2012年。现在看一下1.7.11版本:
$ git show v2.0.0
tag v2.0.0
Tagger: Junio C Hamano <gitster@pobox.com>
Date: Wed May 28 11:04:29 2014 -0700
虽然现在是2012年,但在2012年已经很晚了,以至于这本书可能为时已晚。
我不清楚 Git Pocket Reference 是指什么,但是可能是在Git 2.0推出之后编写或更新的。
Git 1.7.11版为$ git show v1.7.11
tag v1.7.11
Tagger: Junio C Hamano <gitster@pobox.com>
Date: Sun Jun 17 14:07:26 2012 -0700
引入了名为push.default
的新设置。使用simple
设置时,Git对默认的simple
操作施加了新要求:您要推送的分支的 upstream 名称必须与 local 名称。也就是说,如果您的git push
的上游是dev
,则没有参考说明的origin/develop
将失败。同时,如果您的git push
上游没有 ,则没有refspec的dev
也将失败。
(使用名为git push
的{{1}}设置时,这两个默认的push.default
操作都将运行完成,但是会将matching
推到git push
在dev
上(如果存在),或者在dev
没有origin
的情况下完全不推dev
。)
如果您个人留下了origin
,则该设置在2.0之前的Git版本中被视为dev
,而在push.default
中被视为在Git 2.0及更高版本中。由于本书的全部或大部分内容都是在 Git 1.7.11发布之前编写的,因此几乎无法考虑matching
设置将如何影响simple
。没有提到simple
选项。
现代说明会注意到git push
很重要,因此,假设您使用的是Git 2.0版或更高版本,并且以后选择的-u
操作没有refspecs,它们将按照您希望的方式运行。默认为--set-upstream
。因此,他们会要求使用git push
,或者使用较短的push.default
拼写(在git push --set-upstream origin new-branch
中表示相同的意思)。