从本地分支推送到远程主分支

时间:2013-12-11 18:34:50

标签: git version-control branch push bitbucket

我使用Git作为我的VCS。我检查了主服务器并从主服务器创建了本地分支以处理特定故障单(例如fileuploadbranch)。进行了代码更改,将更改的文件添加到索引中。然后使用

提交更改
git commit -m "xxxx"

现在我尝试使用

推送到远程主控
git push -u origin --all

所以在我的bitbucket托管服务中,我能够看到两个分支,即master和fileuploadbranch。

我意识到这是因为给了git push“--all”选项。这使得所有分支都被推送到远程。

所以现在我尝试用推送

git push -u origin master

我相信它只会被移动到远程主人。但是在bitbucket提交视图中,它在右侧显示了本地分支名称(fileuploadbranch),它表明推送来自本地分支。

  1. 即使我们将其从本地分支机构推出,这个更改是否可以在远程主服务器中使用?
  2. 为什么它在bitbucket的提交视图中显示本地分支名称(RHS)?
  3. 任何帮助将不胜感激!!! ...

    由于

1 个答案:

答案 0 :(得分:1)

如果你想推送你称之为file_upload_branch的本地分支(为了便于阅读,我在这里添加了下划线 - 注意这会影响下面的每个事件),但是在远程调用它master

git push origin file_upload_branch:master  # see below about -u

此处push的最后一个参数称为“refspec”,您将其拼写为两部分:本地端标识符(通常是分支名称)和远程端标识符(另一个,可能不同,分支名称)。冒号字符:用于分隔两者。

如果你只使用一个名字,而不是冒号,那么git假设你想要在每一边都有相同的名字。 (你刚才说的不是你想要的。)

如果完全省略refspec(并且不使用--all之类的选项),git会根据各种配置变量选择要推送的内容。如果你还没有设置任何一个,所有当前版本的git都使用名为matching的方法: 1 你的git,执行push操作,询问对方的git“你现在拥有什么分支“,获取结果列表并查看匹配的本地分支,然后推送它们。

使用--all作为(伪)refspec,您的一方只要求将您拥有的每个分支名称推送到远程上的相同名称(如您所发现的那样)。

(作为refspec给出的语法:branchname要求远程删除指定的分支。您可能希望使用它来删除远程上的file_upload_branch 。)

如果将配置变量push.default设置为upstream 2 ,则会更改push的默认操作,而不使用refspec来使用“上游”名称目前的分支机构。也就是说,如果您在file_upload_branch上,并且其远程(origin)上的“上游”名称为master,则为:{/ p>

git push origin

就像你写的那样:

git push origin file_upload_branch:master

这是-u参数的来源:在file_upload_branch成功推送到远程master上的origin后,git push设置< / em> file_upload_branch的“上游”到origin/master。你只需要每个分支执行一次;设置了上游,并将push.default设置为upstream,未来的推送将自动“做你想做的事情。”


1 在git 2.0版中,remote.pushdefault的默认值将更改为simple。如果您现在将--global remote.pushdefault设置为simple,您将为此更改做好准备(因此不受此影响)。或者,如果您希望将upstream作为个人默认设置,则可以设置它,并且它仍应在2.0中运行。

2 请注意,remote.pushdefault可以在每个用户(即--global)git配置中设置,也可以在每个repo配置中设置。每当设置两者时,per-repo配置将覆盖全局配置。您还可以设置一系列令人眼花缭乱的其他配置,但我还是不会这样做:-):remote.origin.pushbranch.file_upload_branch.remotebranch.file_upload_branch.pushremote都会影响行为git push。有关详细信息,请参阅git config documentation