如何将新的本地分支推送到远程 Git 存储库并进行跟踪?

我希望能够执行以下操作:

  1. 基于其他(远程或本地)分支(通过git branchgit checkout -b )创建本地分支

  2. 将本地分支推送到远程存储库(发布),但使其可跟踪,因此git pullgit push将立即起作用。

我怎么做?

我知道 Git 1.7 中的--set-upstream ,但这是创建后的操作。我想找到一种将分支推送到远程存储库时进行类似更改的方法。

答案

在 Git 1.7.0 和更高版本中,您可以签出一个新分支:

git checkout -b <branch>

编辑文件,添加并提交。然后使用-u (-- --set-upstream缩写)选项推送

git push -u origin <branch>

Git 将在推送过程中设置跟踪信息。

如果您不与其他人共享您的存储库,这对于将所有分支推送到远程--set-upstream以及--set-upstream正确跟踪跟踪很有用:

git push --all -u

(不完全是 OP 的要求,但是这种单线很受欢迎)

如果您要与其他人共享您的存储库,那么这并不是一个好方法,因为您将与所有狡猾的实验分支阻塞该存储库。

在引入git push -u ,没有git push选项可以获取您想要的东西。您必须添加新的配置语句。

如果使用以下方法创建新分支:

$ git checkout -b branchB
$ git push origin branchB:branchB

您可以使用git config命令来避免直接编辑.git/config文件。

$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB

或者,您可以手动编辑.git/config文件,以获取到该分支的跟踪信息。

[branch "branchB"]
    remote = origin
    merge = refs/heads/branchB

简而言之,要创建一个新的本地分支,请执行以下操作:

git branch <branch-name>

要将其推送到远程存储库,请执行以下操作:

git push -u origin <branch-name>

这里已经给出的解决方案略有变化:

  1. 基于其他(远程或本地)分支创建本地分支:

    git checkout -b branchname
  2. 将本地分支推送到远程存储库(发布),但使其可跟踪,因此git pullgit push将立即起作用

    git push -u origin HEAD

    使用HEAD是 “将当前分支推送到远程上相同名称的简便方法”。来源: https : //git-scm.com/docs/git-push用 Git 术语来说,HEAD(大写)是对当前分支(树)顶部的引用。

    -u选项仅是--set-setupstream 。这将为当前分支添加上游跟踪参考。您可以通过查看. git / config 文件来验证这一点:

    在此处输入图片说明

我只是做

git push -u origin localBranch:remoteBranchToBeCreated

在已经克隆的项目上。

根据我在localBranch所做的提交,Git 创建了一个名为remoteBranchToBeCreated的新分支。

编辑 :这会将您当前的本地分支(可能称为localBranch )上游更改为origin/remoteBranchToBeCreated 。要解决此问题,只需键入:

git branch --set-upstream-to=origin/localBranch

因此,您当前的本地分支现在origin/localBranchorigin/localBranch

我想您已经克隆了一个项目,例如:

git clone http://github.com/myproject.git
  1. 然后在您的本地副本中,创建一个新分支并签出:

    git checkout -b <newbranch>
  2. 假设您在服务器上做了一个 “git 裸露 --init” 并创建了 myapp.git,您应该:

    git remote add origin ssh://example.com/var/git/myapp.git
    git push origin master
  3. 之后,用户应该能够

    git clone http://example.com/var/git/myapp.git

注意:我假设您已启动服务器并正在运行。如果不是,它将不起作用。一个良好的操作方法是在这里

添加

添加一个远程分支:

git push origin master:new_feature_name

检查一切是否良好(获取原始数据并列出远程分支):

git fetch origin
git branch -r

创建本地分支并跟踪远程分支:

git checkout -tb new_feature_name origin/new_feature_name

更新所有内容:

git pull

编辑过时的,只用git push -u origin $BRANCHNAME


使用William 的其他 Git 工具神奇的 repoclone )中的git publish-branch

好的,没有 Ruby,所以 - 忽略安全措施! - 使用脚本的最后三行并创建一个 bash 脚本git-publish-branch

#!/bin/bash
REMOTE=$1 # Rewrite this to make it optional...
BRANCH=$2
# Uncomment the following line to create BRANCH locally first
#git checkout -b ${BRANCH}
git push ${ORIGIN} ${BRANCH}:refs/heads/${BRANCH} &&
git config branch.${BRANCH}.remote ${REMOTE} &&
git config branch.${BRANCH}.merge refs/heads/${BRANCH}

然后运行git-publish-branch REMOTENAME BRANCHNAME ,其中 REMOTENAME 通常是原点(您可以修改脚本以将原点作为默认值,等等。)

通过从现有分支分支来创建新分支

git checkout -b <new_branch>

然后使用以下命令将该新分支推送到存储库

git push -u origin <new_branch>

这将创建所有本地提交并将其推送到新创建的远程分支origin/<new_branch>

对于 1.7 之前的 GitLab 版本,请使用:

git checkout -b name_branch

(name_branch,例如: master

要将其推送到远程存储库,请执行以下操作:

git push -u origin name_new_branch

(name_new_branch,例如: feature