我有一个带有默认配置版本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...
答案 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>
)。