Git 推送到远程分支

我试图跟随 这篇文章,但没有解决我的问题,而是感到困惑。

情况是这样的。

我已经创建了一个类似 git checkout -b <branch_name>的分支

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

现在,所有这些更改都在我的未提交的本地 <branch_name>分支中。我想做的是把这些变化推向上游,但是我想把它推向一个不存在的分支,例如 <branch_name>_test

我不想把它推到我的 <branch_name>。我怎么能这样做。

255031 次浏览

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

--set-upstream设置本地分支和远程分支之间的关联。你只需要做第一次。在接下来的推动中,你可以这样做:

git push

如果您还没有设置 origin,请使用:

然后重试上面的命令。

只需将此分支推送到另一个分支名称

 git push -u origin localBranch:remoteBranch

如果你不想要 set-upstream,只要

 git push origin localBranch:remoteBranch

对于现代的 Git 版本,要使用的命令是:

git push -u origin <branch_name_test>

这将自动设置分支名称,以跟踪从远程和推在一去。

您可以像下面这样将本地分支推送到 新的远程分支:

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

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

首先,让我们注意 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

在执行推送操作时,可以通过将 -u添加到 git push选项中来告诉 git push同时设置分支的 上游的名字。设置上游名称可以让你的 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 将停止抱怨ーー但最简单的解决方案只是首先重命名本地分支,以便本地名称和远程名称匹配。(要设置哪些设置,以及/或是否重命名分支,取决于您自己。)


更准确地说,git 参考你的 remote.remote.push设置来获得 refspec 的上游部分。如果您在这里没有设置任何内容,那么 违约将使用相同的名称。

这不一定是一个分支名。例如,您可以在这里提供 HEAD或提交散列。如果您使用的不是分支名称,那么 必须在右侧拼写出完整的 refs/heads/branch(这取决于远程中已经有哪些名称)。