Git推送到远程分支

90

我试图按照这篇文章的方法操作,但只是感到困惑,而不是解决我的问题。

以下是情景描述:

我创建了一个分支,命令为git checkout -b <branch_name>。然后我进行了一些更改,并执行以下命令:

  1. git add .
  2. git commit -m "comment"

现在,所有这些更改都存在于未提交的本地<branch_name>分支中。我想要将这些更改推送到上游,但我想要将其推送到不存在的分支,例如<branch_name>_test

我不想将其推送到我的<branch_name>。如何做到呢?

6个回答

118

只需将此分支推送到其他分支名称即可

 git push -u origin localBranch:remoteBranch

如果您不想进行set-upstream操作,只需

 git push origin localBranch:remoteBranch

12
请注意,如果您不包括“-u”或“--set-upstream”标志,每次推送时都需要键入整个命令。在设置上游之前,“git push”本身将无法工作。请确保设定上游以便更轻松地推送代码。 - Scott
5
你知道吗...像"-u"这样的标志会让初学者感到困惑。直接输入整个命令并了解它的工作原理更好。我喜欢这个简单明了的答案。 - kobako
2
顺便说一下,git push origin remoteBranch 是将你的 本地 remoteBranch 推送到 远程 remoteBranch - Junior Tour

88

首先,需要注意的是git push命令“需要”两个额外的参数,如果您不提供它们,它将自动补全。因此,基本的命令是git push remote refspec

remote部分通常很简单,因为它几乎总是只是单词origin。更棘手的部分是refspec。最常见的情况是在这里写一个分支名称:git push origin master,例如。这使用您的本地分支推送到同名分支1上的远程分支,并在必要时创建它。但它不一定只是一个分支名称。

特别地,refspec有两个由冒号分隔的部分。对于git push命令,左侧部分标识要推送的内容2,右侧部分标识要给远程的名称。在本例中,左侧部分将是branch_name,右侧部分将是branch_name_test。例如:

git push origin foo:foo_test

当你进行push操作时,可以通过在git push选项中添加-u,同时设置你的分支上游名称(upstream name)。设置上游名称会让git保存foo_test(或其他名称),这样,在你处于foo分支时,未带参数的将来的git push尝试推送到远程的foo_test。Git还会保存远程,这里是origin,因此你不必再输入它。

你只需要传递一次 -u:它基本上就是为你运行“git branch --set-upstream-to”。(如果以后再次传递 -u,则重新运行上游设置,并按指示更改;或者您可以自己运行“git branch --set-upstream-to”。)

但是,如果你的git是2.0或更新版本,并且没有设置任何特殊配置,你将遇到与我在注释1中输入的相同的问题:push.default将被设置为简单(simple),它将拒绝推送,因为上游的名称与你本地的不同。如果将push.default设置为upstream,git将停止抱怨,但最简单的解决方案是首先重命名你的本地分支,以使本地和远程名称匹配。 (要设置哪些设置,或者是否要重命名你的分支,由你决定。)


1更精确地说,git会查找remote.remote.push设置以推导出refspec的上游部分。如果你在这里没有设置任何内容,则默认使用相同的名称。

2这不一定是分支名称。例如,你可以在这里提供HEAD或提交哈希值。如果使用的不是分支名称,则可能必须在右侧完全拼写出refs/heads/branch(这取决于远程已经有哪些名称)。


22

git push --set-upstream origin <branch_name>_test

--set-upstream参数用来设定本地分支与远程仓库之间的关联。只需要在第一次推送时使用即可,之后再进行推送时可以直接使用git push命令。

如果你还没有设置origin,可以使用以下命令进行设置:

git remote add origin <repository_url>然后重新运行上述命令。


正如我所提到的,我不想将它推送到我的分支 <branch_name>。我想将它推送到一个新的分支 <branch_name>_test,目前还不存在。 - Em Ae
抱歉,没有看到。我更新了我的答案。你可以给远程分支取任何名字,只需调整push命令中的最后一个参数即可。 - Scott

17

你可以这样将本地分支推送到一个新的远程分支:

git push origin master:test

(假设origin 是你的远程仓库,master 是你的本地分支名称,test 是你想要创建的新的远程分支的名称。)

如果同时您想要设置本地分支跟踪新创建的远程分支,可以使用 -u(在较新版本的 Git 中)或 --set-upstream 命令,例如:

git push -u origin master:test
或者
git push --set-upstream origin master:test

将基于您本地的master创建一个名为test的新远程分支,在远程存储库origin中,并设置您本地的master跟踪它。


14

如果使用现代版本的 Git,应该使用以下命令:

git push -u origin <branch_name_test>

这将自动设置分支名称以跟踪远程并在一次提交中推送。


0

您可以使用以下命令:

命令结构:

git push -u origin <branch_name>

示例: 如果您的分支名称是develop,那么您的命令应该像这样...

git push -u origin develop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接