git 如何将当前分支推送到另一个远程/源?

Posted

技术标签:

【中文标题】git 如何将当前分支推送到另一个远程/源?【英文标题】:How git push current branch to another remote/origin? 【发布时间】:2013-04-16 12:17:24 【问题描述】:

我的 .git/config:

[remote "origin"]
    url = git@github.com:nfpyfzyf/test.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

我当地的分支机构:

                     HEAD
                     |
                 F---G  feature**current branch
                /
       C---D---E develop
      /          
 A---B  master

我现在在功能分支中,并且想要推送到远程。当前命令是什么,是git push origin feature吗?如果我这样做git push会发生什么?

【问题讨论】:

【参考方案1】:

要推送特定分支,请运行 git push <remote> <branch>。在您的情况下,您唯一定义的遥控器是origin,并且您想推送您的feature 分支,这样就可以

$ git push origin 功能

“Examples” section of the git push documentation 描述了如果您在没有其他参数的情况下运行 git push 会发生什么。

git push

类似git push <remote>,当前分支的远程在哪里(或origin,如果当前分支没有配置远程)。

鉴于您的问题中的配置,您的feature 分支没有配置远程,因此上述调用等效于下一个示例。

git push origin

无需额外配置,像git push origin :一样工作……

按照菊花链,我们看到这等价于

git push origin :

将“匹配”的分支推送到原点。有关“匹配”分支的描述,请参阅上面的 OPTIONS 部分。

匹配分支的规则是

特殊的 refspec :(或 +: 允许非快进更新)指示 git 推送“匹配”分支:对于本地端存在的每个分支,远程端都会更新,如果远程端已存在同名分支。如果未找到显式 refspec(既不在命令行上,也不在相应远程文件的任何 Push 行中——见下文)且未设置 push.default 配置变量,这是默认操作模式。

在您的情况下,唯一匹配的分支是 master,因此 git push 将推送该分支并退出。

【讨论】:

【参考方案2】:

是的,git push origin feature 是正确且明确的命令。

当你在没有参数的情况下执行git push 时会发生什么,这会受到你的配置的影响。配置变量push.default 告诉 git 在这种情况下要做什么。查看手册页(git config --help 并搜索 push.default)以获取更多信息。就这么多,有几种可能性:nothingmatchingupstreamsimplecurrent

What is the difference between git push.default=current and push.default=upstream? 也可以提供帮助。

【讨论】:

【参考方案3】:

git push origin feature 是正确的。如果你只是 git push 它可能会这样说:

fatal: The current branch feature has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin feature

在你使用了--set-upstream(或者只是-u)之后,简单的git push就可以工作了

【讨论】:

【参考方案4】:

如果您正在使用git-flow,您可以使用

git flow feature publish $FEATURE

将分支推送到您的远程并远程创建它。

等于做一个简单的

git push origin $FEATURE

如果您只是简单地执行git push,这取决于您的配置会发生什么 - 在我的配置中,它会推送所有远程现有的分支。

【讨论】:

【参考方案5】:

git push origin $FEATURE 肯定是正确的,并且会得到你想要的。但是,我经常使用:

git push -u origin HEAD

这将使用分支名称推送我当前的分支,因此我不必在命令行上显式输入它。如其他答案之一所述,-u 将设置上游,以便将来可以使用普通的git push

【讨论】:

【参考方案6】:

我认为这是可行的方法,

git push --set-upstream origin refs/heads/[your_local_branch_name]:refs/heads/[remote_branch_name_you_want]

【讨论】:

以上是关于git 如何将当前分支推送到另一个远程/源?的主要内容,如果未能解决你的问题,请参考以下文章

git 强制推送到master

git 创建分支并推送到远程分支

git - 将某个分支推送到远程的某个分支

git 创建分支并推送到远程

git创建本地分支,推送到远程

git怎么将本地仓库推送到一个新的远程分支包含所有历史提交信息