3513

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

但是,我的工作流程略有不同。首先我想创建一个本地分支,只有当我满意并且想要共享我的分支时,我才会将它推送到上游。

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

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

4

24 回答 24

4075

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

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

将远程分支推送到远程服务器时会自动创建远程分支。因此,当您准备好时,您可以执行以下操作:

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

Where <remote-name>is 通常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) 和其他命令使用。

于 2009-10-05T09:29:17.737 回答
966

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

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 本地到远程 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
于 2011-07-26T01:09:09.753 回答
380

简单的 Git 2.0+ 解决方案:

Git 2.0 开始,行为变得更加简单

您可以配置 gitpush.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
于 2014-11-28T09:46:01.427 回答
92

如前面的答案所述,

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

足以推动本地分支。

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

git remote update

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

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>
于 2011-12-27T14:12:49.047 回答
83

基于当前分支在本地新建一个分支:

git checkout -b newbranch

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

git push -u origin HEAD

这是将当前分支推送到同名分支并对其进行origin跟踪的快捷方式,以便您以后无需指定origin HEAD

于 2014-02-24T14:58:49.297 回答
74

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

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 

或者如果你想bug_fixes从远程分支创建一个本地分支,比如说development

git checkout -b bug_fixes origin/development

您可以通过以下方式将分支推送到远程仓库

git push -u origin bug_fixes

每当您想从任何其他分支更新您的分支时说master

git pull origin master
于 2016-05-01T06:12:36.640 回答
62

[快速回答]

您可以分两步完成:

1.使用checkoutfor创建本地分支:

git checkout -b yourBranchName

2.使用push命令自动创建分支并将代码发送到远程仓库:

git push -u origin yourBranchName

有多种方法可以做到这一点,但我认为这种方法非常简单。

于 2019-10-02T09:43:49.433 回答
51

如果您实际上只想创建远程分支而没有本地分支,则可以这样做:

git push origin HEAD:refs/heads/foo

它将您的 HEAD 推送到远程不存在的分支foo 。

于 2015-11-25T15:29:39.337 回答
35

最简单的解决方案...鼓滚... git 版本 2.10.1 (Apple Git-78)

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes, and do a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force

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

于 2017-03-18T06:23:35.433 回答
29

首先在本地创建分支:

git checkout -b your_branch

然后远程创建分支:

git push --set-upstream origin your_branch

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

$ git --version
git version 2.3.0

干杯!

于 2015-04-21T23:43:46.303 回答
20

在本地机器上创建分支并切换到这个分支:

$ 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]

这里所有信息

其他现有项目

于 2016-05-27T11:39:29.630 回答
15

从现有分支创建本地分支(可以是 master/develop/any-other-branch)。

git checkout -b 分支名称

将此推送到远程

git push -u remote_name local_branch_name:remote_branch_name

这里,

  1. -u :设置上游分支
  2. remote_name :git 在创建存储库时默认将名称设置为“origin”。然而,这可以更改为不同的任意名称。
  3. local_branch_name :是要推送的本地分支的名称。
  4. remote_branch_name :是我们要在远程创建的远程分支的名称。

如果我们删除本地和远程分支名称,它将具有格式

git push -u remote_name 分支名称

这会将本地分支推送到远程,并与本地分支 branch_name 同名。本地分支也将跟踪远程分支。

于 2017-02-15T06:57:20.520 回答
13

你可以简单地,

  1. git checkout -b YOUR-NEW-BRANCH-NAME
  2. git add .
  3. git push origin YOUR-NEW-BRANCH-NAME

你可以在相关的 git repo 下看到你的分支和代码

干杯!!:)

于 2021-04-13T18:10:33.857 回答
10

我知道这个问题得到了很好的回答,但只是想列出我创建新分支“myNewBranch”并推送到远程(在我的情况下为“origin”)并设置跟踪所采取的步骤。将其视为“TL;DR”版本:)

# create new branch and checkout that branch
git checkout -b myNewBranch
# now push branch to remote 
git push origin myNewBranch
# set up the new branch to track remote branch from origin
git branch --set-upstream-to=origin/myNewBranch myNewBranch
于 2014-10-23T14:09:17.097 回答
9

只是想补充一点:

git checkout -b {branchName}

创建一个新分支,它还检查该分支 / 使其成为当前分支。如果出于某种原因,您只想关闭一个分支但不将其设为当前分支,那么您将使用以下命令:

git branch {branchName}

在第一个命令中,“checkout”将所述分支设为当前分支,而“-b”表示:此分支尚不存在,因此请为我创建。

于 2015-03-30T14:02:24.327 回答
8

现在使用 git,当您在正确的分支中时,您只需键入

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

和 git 为你创建 origin 分支。

于 2014-10-27T17:05:42.057 回答
6

如何通过 Source Tree 进行操作

 1: Open SourceTree, click on Repository -> Checkout
 2: Click on Create New Branch
 3: Select the branch where you want to get code for new branch 
 4: Give your branch name
 5: Push the branch  (by click on Push-button)
于 2015-07-21T11:27:20.723 回答
5

git push -u <remote-name> <branch-name>如果新创建的分支不是从同一个 repo 生成的,则不起作用,即如果您没有使用 创建新分支git checkout -b new_branch,那么这将不起作用。

例如,我在本地克隆了两个不同的存储库,我必须将 repo2/branch1 复制到 repo1/,然后再推送它。

链接帮助我将本地分支(从另一个仓库克隆)推送到远程仓库:

于 2014-02-24T21:38:11.733 回答
4

这是通过 Egit 在 Eclipse 中执行此操作的方法。

  1. 转到“Git Repository Exploring”视图并展开要创建分支的 git 项目。在 Branches -> Local .. 选择要为其创建分支的分支(在我的情况下,我选择了 master .. 如果您愿意,可以选择另一个分支).. 然后右键单击并单击 Create Branch 选项.. 和选择结帐此项目选项,然后单击完成按钮。

  2. 现在从项目资源管理器中选择项目.. 右键单击​​然后团队 -> 推送分支。

将创建一个新的远程分支。您可以将分支的名称提供给您的同事,以便他们可以拉取它。

于 2014-01-31T23:46:50.037 回答
2

我使用了两种方法来创建分支

如果您使用 TortoiseGit,请按照以下步骤操作:-

1.使用 TortoiseGit 创建分支

右键单击您的项目 >>> TortoiseGit >>> 创建分支 >>> 编写分支名称并选择基础分支然后按确定

2.推分支

右键单击您的项目 >>> TortoiseGit >>> 推送 >>> 单击确定

3.切换到新分支

右键单击您的项目 >>> TortoiseGit >>> Switch/Checkout >>> 选择新创建的分支并按确定

如果您使用命令提示符,请按照下列步骤操作:-

1.使用命令提示符创建分支

$git checkout -b new_branch_name

2.推分支

$git push origin new_branch_name

3.切换到新分支它已经切换到 new_branch_name 否则你可以使用

$git checkout new_branch_name

于 2020-01-07T06:01:15.497 回答
0

我使用它,它非常方便:

git config --global alias.mkdir '!git checkout -b $1; git status; git push -u origin $1; exit;'

用法:git mkdir NEW_BRANCH

你甚至不需要 git status;也许,我只是想确保一切顺利......

您可以使用单个命令同时拥有 LOCAL 和 REMOTE 分支。

于 2019-07-24T07:31:34.700 回答
0

我通过将其添加到我的 bash 中解决了这个问题~/.profile

function gitb() { git checkout -b $1 && git push --set-upstream origin $1; }

然后启动一个新的本地+远程分支,我写:

gitb feature/mynewbranch

这将创建分支进行第一次推送,不仅是为了设置跟踪(以便稍后在没有额外参数的情况git pullgit push工作),而且实际上确认目标 repo 中还没有这样的分支。

于 2020-06-09T20:33:02.367 回答
0

如果您曾经--single-branch克隆过当前分支,请使用它从当前分支创建一个新分支:

git checkout -b <new-branch-name>
git push -u origin <new-branch-name>
git remote set-branches origin --add <new-branch-name>
git fetch
于 2020-09-29T10:21:45.603 回答
0

这是一个示例,我只有两个本地分支:origin 和 mobile-test。

直到我在命令行中使用它在远程分支中实际显示我更新的文件之前,对我来说没有任何效果。

git push --set-upstream origin mobile-test
于 2020-09-22T05:26:19.907 回答