Git推进远程分支

Em *_* Ae 47 git

我试图关注这篇文章,但感到困惑,而不是让我的问题得到解决.

这是场景.

我创建了一个分支git checkout -b <branch_name>.然后,我做了一些改变,并做了

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

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

我不想把它推给我<branch_name>.我怎么能这样做.

tor*_*rek 60

首先,让我们注意git push"想要"另外两个参数,如果你不提供这些参数,它们会自动生成.因此,基本命令.git push remote refspec

remote部分通常是微不足道的,因为它几乎总是这个词origin.更棘手的部分是refspec.最常见的是,人们在这里写一个分支名称:git push origin master例如.这将使用您的本地分支推送到远程控制器上的同名分支1,并在必要时创建它.但它不一定只是一个分支名称.

特别地,a refspec具有两个结肠分离的部分.因为git push,左侧的部分标识要推送的内容,2右侧的部分标识要提供给遥控器的名称.在这种情况下左边branch_name的部分是,而右边的部分是branch_name_test.例如:

git push origin foo:foo_test
Run Code Online (Sandbox Code Playgroud)

当你在做推,你可以告诉你git push设置你的分支的上游名字的同时,加入-ugit push选项.设置上游名称会使你的git保存foo_test(或者其他)名称,这样git push当你在foo分支上时,没有参数的未来可以尝试推送到foo_test远程(git也保存远程,origin在这种情况下,所以你不必输入那个).

你只需要传递-u一次:它基本上只git branch --set-upstream-to适合你.(如果您-u稍后再次通过,它会重新运行上游设置,按照指示更改它;或者您可以git branch --set-upstream-to自己运行.)

但是,如果您的git是2.0或更新,并且您没有设置任何特殊配置,那么您将遇到我在上面的脚注1中输入的相同类型的东西:push.default将设置为simple,因为上游的名称将拒绝推送与您自己的本地名称不同.如果设置push.defaultupstream,git将停止抱怨 - 但最简单的解决方案是首先重命名本地分支,以便本地和远程名称匹配.(要设置的设置和/或是否重命名分支,取决于您.)


1更准确地说,git会查询您的设置以获得refspec的上游一半.如果您未在此处设置任何内容,则默认使用相同的名称.remote.remote.push

2这不一定是分支名称.例如,您可以HEAD在此处提供或提交哈希.如果您使用分支名称以外的其他内容,则可能必须在右侧拼出完整内容(这取决于遥控器上已有的名称).refs/heads/branch


Awa*_*yte 50

只需将此分支推送到不同的分支名称即可

 git push -u origin branch_name:branch_name_test
Run Code Online (Sandbox Code Playgroud)

  • 只需注意一下,如果你不包含`-u`或`--set-upstream`标志,你每​​次推动时都必须输入整个命令.在上游设置之前,`git push`不会自行运行. (6认同)
  • 你知道...像“-u”这样的标志确实会让初学者感到困惑。只需键入整个命令并了解它是如何工作的。我喜欢这个简单的答案。 (3认同)
  • 顺便说一句,`git push origin remoteBranch`是将你的`本地remoteBranch`推送到`远程remoteBranch`; (2认同)

Sco*_*ott 14

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

--set-upstream设置本地分支与远程之间的关联.你只需要第一次这样做.在随后的推送中你可以做到:

git push

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

git remote add origin <repository_url> 然后重试上面的命令.


Ter*_*ass 10

您可以将本地分支推送到新的远程分支,如下所示:

git push origin master:test
Run Code Online (Sandbox Code Playgroud)

(假设origin您的远程,master是您的本地分支名称,并且test是您希望创建的新远程分支的名称.)

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

git push -u origin master:test
Run Code Online (Sandbox Code Playgroud)

要么

git push --set-upstream origin master:test
Run Code Online (Sandbox Code Playgroud)

...将根据您的本地创建一个名为test远程存储库的新远程分支,设置您的本地跟踪它.originmastermaster


Mak*_*oto 8

使用现代Git版本,使用的命令将是:

git push -u origin <branch_name_test>
Run Code Online (Sandbox Code Playgroud)

这将自动将分支名称设置为从远程跟踪并一次性推送.