题 你如何创建一个远程Git分支?


我创建了一个本地分支,我想在上游“推”。 Stack Overflow上有一个关于如何跟踪新创建的远程分支的类似问题。

但是,我的工作流程略有不同。 第一 我想创建一个本地分支,当我满意并希望共享我的分支时,我只会将其推送到上游。

  • 我该怎么办? (我的谷歌搜索似乎没有提出任何东西)。
  • 我如何告诉我的同事从上游存储库中取出它?

更新使用Git 2.0有一个更简单的答案 我写的如下: https://stackoverflow.com/a/27185855/109305


2712
2017-10-05 09:21


起源


有没有人回答你的第二个问题? >>我如何告诉我的同事从上游存储库中取出它? - milkplus
可能相关: Pro Git:3.5 Git分支 - 远程分支。
@milkplus get fetch --all 在远程端获取新分支(但只有一个 get fetch --prune 删除本地删除的远程分支的引用。我想,要么这应该由他们自动设置,要么你必须口头与他们交谈。 - peterh
可能重复 如何将新的本地分支推送到远程Git存储库并进行跟踪? - Trevor Boyd Smith


答案:


首先,在本地创建分支:

git checkout -b <branch-name> # Create a new branch and check it out

将其推送到远程服务器时,将自动创建远程分支。因此,当您准备好它时,您可以这样做:

git push <remote-name> <branch-name> 

哪里 <remote-name> 通常是 origin,git给你克隆的遥控器的名称。然后你的同事就会拉出那个分支,它会在本地自动创建。

但请注意,正式格式为:

git push <remote-name> <local-branch-name>:<remote-branch-name>

但是当你省略一个时,它假设两个分支名称是相同的。说完这个,就像一句话 警告,不要犯下仅指定的严重错误 :<remote-branch-name> (使用冒号),或远程分支将被删除!

这样一个随后的 git pull 会知道该怎么做,你可能会想要使用:

git push --set-upstream <remote-name> <local-branch-name> 

如下所述, --set-upstream 选项设置上游分支:

对于每个最新的分支或   成功推送,添加上游   (跟踪)参考,用于   无参数git-pull(1)等   命令。


3296
2017-10-05 09:29



请注意,git的默认行为是推送 匹配 refs,所以 git push <remote> 如果没有分支,就不会推分支 <remote>。 - Jakub Narębski
你可能想用 git push -u <remote-name> <branch-name> 相反,以便随后 git pull 会知道该怎么做。 - Bart Schuller
您可以使用,而不是显式指定服务器名称 origin,这意味着“服务器我得到了这个回购的其余部分”:因此 git push origin <branch-name>。 - jpatokal
如果你忘记使用了 -u 选项,你可以输入 git push -u 之后在分公司,然后 git pull 将工作。 - Jan
把它们放在一起, git push -u origin <local-branch-name> 是什么对我有用。 - Samo


首先,您必须在本地创建分支

git checkout -b your_branch

之后,您可以在分支机构中本地工作,当您准备共享分支时,推送它。下一个命令将分支推送到远程存储库源并跟踪它

git push -u origin your_branch

队友可以通过以下方式联系您的分支机构:

git fetch
git checkout origin/your_branch

您可以继续在分支中工作并随时随地推送而不将参数传递给git push(无参数git push会将master推送到远程master,your_branch本地到remote your_branch等等)

git push

队友可以通过提交推送到您的分支,然后明确推送

... work ...
git commit
... work ...
git commit
git push origin HEAD:refs/heads/your_branch

或者跟踪分支以避免git push的参数

git checkout --track -b your_branch origin/your_branch
... work ...
git commit
... work ...
git commit
git push

797
2017-07-26 01:09



如果git看起来对你来说太复杂了,我建议你使用Dropbox或Google Drive,真的,它比git简单得多,还有版本/等...... - dseminara


简单的Git 2.0+解决方案:

作为 Git 2.0的行为变得更加简单

你可以配置git push.default = current 让生活更轻松:

我添加了这个,所以现在我可以在上游推送一个新的分支

$ git push -u

-u 将跟踪同名的远程分支。不使用此配置,您将自动猜测对git push的远程引用。从 git.config文档

push.default 

如果没有明确给出refspec,则定义git push应采取的操作。

push.default = current  - 推送当前分支以更新分支   接收端同名。适用于中央和非中央工作流程。

对我来说,这是我日常Git工作流程的一个很好的简化。配置设置负责处理本地添加分支并希望远程创建的“常规”用例。此外,我可以通过刚刚轻松地从遥控器创建本地分支 git co remote_branch_name (而不是使用 --set-upstream-to 旗)。

我知道这个问题并且接受的答案相当陈旧,但行为已经改变,因此现在存在配置选项以使您的工作流更简单。

要添加到全局Git配置,请在命令行上运行:

$ git config --global push.default current

242
2017-11-28 09:46



我发现 git push -u origin HEAD 回答 这里 更加冗长(你写下你正在做的事情)而不是太多的打字。此外,一个 git push -u 没有额外的参数,如果创建分支,则对我不起作用 -t - Qw3ry


如前面的答案所述,

git push <remote-name> <local-branch-name>:<remote-branch-name>

足以推动当地分公司。

您的同事可以使用以下命令拉出所有远程分支(包括新分支):

git remote update

然后,要在分支上进行更改,通常的流程:

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>

65
2017-12-27 14:12





根据当前分支在本地创建新分支:

git checkout -b newbranch

像往常一样提交任何更改。然后,将其推向上游:

git push -u origin HEAD

这是将当前分支推送到同名分支的快捷方式 origin 并跟踪它,以便您不需要指定 origin HEAD 在将来。


49
2018-02-24 14:58



这有助于我的情况: git push -u origin HEAD。我认为这是最明确的方式。 - Scadge
是的,你永远不会记得你最后输入的分支,确切地说,这是要走的路。 - marksyzm
@marksyzm如果你不记得你所在的分支或你的名字,你可能根本就不应该推!至少,不是没有跑步 git status 第一。 - Zenexer
是的,必须确保世界不会因为这种推动而爆炸;我同意。 - marksyzm
这是同时创建跟踪分支和远程分支的最有效方法。我还想补充一下 git remote show origin 作为第三步,只是为了可视化新的跟踪/跟踪关系。 - hb5fa


如果你想在没有本地的情况下创建远程分支,你可以这样做:

git push origin HEAD:refs/heads/foo

它推动你的HEAD是分支 FOO 在遥控器上不存在。


32
2017-11-25 15:29



这样做完全使我的Visual Studio混淆到无法正常启动的程度。团队资源管理器根本不会加载,但其他一切都让疯子也抛出了错误。仅供参考。 - Josh
这听起来应该可以工作,但是当我真正尝试它时,我们的gitlab服务器并没有将结果识别为分支。 - JosephH
什么分支foo在遥控器上分支?如果我想foo​​分支foo2怎么办?那可能吗?谢谢。 - user674669


如果要从当前分支创建分支

git checkout -b {your_local_branch_name} 

你想要一个远程分支的分支,你可以试试

git checkout -b {your_local_branch_name} origin/<remote_branch_name>

如果您完成了更改,则可以添加该文件。

git add -A or git add <each_file_names>

然后在本地进行提交

git commit -m 'your commit message'

当你想推送到远程仓库时

git push -u origin <your_local_branch_name>

一起将是

git checkout -b bug_fixes 

要么 如果你想从远程分支创建一个分支说 发展 

git checkout -b bug修复 起源/发展

您可以将分支推送到远程仓库

git push -u origin **bug_fixes**

任何时候你想从任何其他分支更新你的分支说

git pull origin master


23
2018-05-01 06:12





首先,您在本地创建分支:

git checkout -b your_branch

然后远程创建分支:

git push --set-upstream origin your_branch

注意:这适用于git的最新版本:

$ git --version
git version 2.3.0

干杯!


22
2018-04-21 23:43



这只是命令生成的帮助文本 git push 当您的本地分支未被远程跟踪时。 - nurettin


在本地计算机上创建分支并切换到此分支:

$ git checkout -b [name_of_your_new_branch]

在github上推分支:

$ git push origin [name_of_your_new_branch]

如果您想在分支机构中提交某些内容,请务必进入您的分支机构。

您可以使用以下命令查看所有分支:

$ git branch

哪个会显示:

* approval_messages
  master
  master_clean

为您的分支添加新的远程:

$ git remote add [name_of_your_remote] 

将提交中的更改推送到您的分支:

$ git push origin [name_of_your_remote]

更新官方存储库中的原始分支时更新您的分支:

$ git fetch [name_of_your_remote]

然后,您需要申请合并更改,如果您的分支派生自您需要做的开发:

$ git merge [name_of_your_remote]/develop

删除本地文件系统上的分支:

$ git branch -d [name_of_your_new_branch]

要强制删除文件系统上的本地分支:

$ git branch -D [name_of_your_new_branch]

删除github上的分支:

$ git push origin :[name_of_your_new_branch]

这里所有信息

其他现有项目


16
2018-05-27 11:39





最简单的解决方案...... Drumm Roll。 git版本2.10.1(Apple Git-78)

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes , and go a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force

注: - 您刚刚在本地环境中创建的分支,以及您尝试推送的远程不存在分支, 必须具有相同的名称


13
2018-03-18 06:23



谢谢你的建议。即使你称之为一个简单的解决方案,我仍然认为 git push -u 更容易。要求您有一个全局配置行,请参阅 stackoverflow.com/a/27185855/109305。我用 git push -u 不断地,它在工作时覆盖了99%的用例。 - Jesper Rønn-Jensen


现在使用git,当你在正确的分支中时,你可以输入

git push --set-upstream origin <remote-branch-name>

和git为你创建原始分支。


8
2017-10-27 17:05



-u是--set-upstream ...的缩写。所以命令可以是git push -u origin <remote-branch-name> - Uncaught Exception
致命:'origin'似乎不是一个git存储库 - Dmitry Grinko
也许你必须设置你的git存储库的起源 - Maurizio Brioschi