当我推送远程服务器上不存在的本地分支时,git会做什么?

时间:2013-11-16 11:31:52

标签: git

我有一个带有默认配置版本1.7.1的vanilla git安装。

所以我做了以下行动:

git branch local_only
git checkout local_only
git push

local_only在遥控器上不存在。

push命令需要几个秒才能完成,并最终告诉我“一切都是最新的”。我想了解push在这种情况下实际做了什么:

  • 如果git检查是否存在远程分支,为什么不返回错误? OR

  • 如果git没有检查是否存在远程分支,为什么需要几秒钟,并返回成功响应?

git branch -avv输出:

* local_only            ...commit...
master                  ...commit...
remotes/origin/master   ...commit...

2 个答案:

答案 0 :(得分:4)

你需要像这样推动它:

git branch local_only
git checkout local_only
git push origin 

然后它将创建一个远程分支和远程原始存储库。请点击此处“推送”一节中的更多内容:http://git-scm.com/book/en/Git-Branching-Remote-Branches


关于git在你'git push'时做什么的问题。根据这个article'git push'相当于'git push origin master:master'。所以它应该检查你的origin / master分支,如果你在master中有新的东西,就要更新它,无论你当前在哪个早午餐。

答案 1 :(得分:2)

这取决于名为push.default(git config push.default)的设置。

Pre Git 2.0,默认为matching,这意味着git将推送也存在于遥控器上的任何分支。在Git 2.0之后,默认设置未设置,git建议您将其设置为simple

因此,如果您创建一个新分支,并且执行git push,它将不会推送该分支,因为它在遥控器上尚不存在。

在较新版本的git中,他们会将默认值更改为simple,将当前分支推送到该分支的上游分支,但前提是它们具有相同的名称。

另见git config

  

push.default
  如果没有明确指定refspec,则定义git push应采取的操作   给出。不同的值非常适合特定的工作流程;对于   例如,在纯粹的中心工作流程中(即获取源是相同的   上游可能是你想要的。

在所有这些情况下,您首先必须明确推送新分支(git push <remote> <branch>),有些确实需要上游(git push -u <remote> <branch>)。