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

How do I push a new local branch to a remote Git repository and track it too?

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

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

  • 推动当地分支机构到远程存储库(发布),但使其可跟踪,因此git pullgit push将立即工作。

  • 我该怎么做?

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


    在Git 1.7.0及更高版本中,您可以签出新的分支:

    1
    git checkout -b <branch>

    编辑文件,添加并提交。然后,使用-u(--set-upstream的简称)选项推:

    1
    git push -u origin <branch>

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


    如果您没有与其他人共享您的回购,这将有助于将您的所有分支推送到远程,并且--set-upstream会正确地为您跟踪:

    1
    git push --all -u

    (不完全符合OP的要求,但这条线路非常受欢迎)

    如果你和其他人分享你的回购协议,这不是很好的形式,因为你会用你所有狡猾的实验分支阻塞回购协议。


    在引入git push -u之前,没有git push选项来获得您想要的。您必须添加新的配置语句。

    如果创建新分支时使用:

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

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

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

    或者,您可以手动编辑.git/config文件,以便将跟踪信息保存到此分支。

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


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

    1
    git branch <branch-name>

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

    1
    git push -u origin <branch-name>


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

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

    1
    git checkout -b branchname
  • 将本地分支推送到远程存储库(publish),但使其可跟踪,以便git pullgit push立即工作。

    1
    git push -u origin HEAD

    使用HEAD是"将当前分支推送到远程服务器上的同一名称的简便方法"。来源:https://git-scm.com/docs/git-push在git术语中,head(大写)是对当前分支(树)顶部的引用。

    -u期权是--set-setupstream的简称。这将为当前分支添加上游跟踪引用。您可以通过查看.git/config文件来验证这一点:

    Enter image description here


  • 我只是做

    1
    git push -u origin localBranch:remoteBranchToBeCreated

    在已经克隆的项目上。

    根据我在localBranch的承诺,git创建了一个名为remoteBranchToBeCreated的新分支。


    我想你已经克隆了一个项目,比如:

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

    1
    git checkout -b <newbranch>
  • 假设您在服务器上创建了一个"git-bare--init"并创建了myapp.git,那么您应该:

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

    1
    git clone http://example.com/var/git/myapp.git
  • 注意:我假设您已经启动并运行了服务器。如果不是的话,就不起作用了。这里有一个很好的操作方法。

    补充

    添加远程分支:

    1
    git push origin master:new_feature_name

    检查是否一切正常(获取源站并列出远程分支):

    1
    2
    git fetch origin
    git branch -r

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

    1
    git checkout -tb new_feature_name origin/new_feature_name

    更新所有内容:

    1
    git pull


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

    使用william的其他git工具(gitorious repo和clone)中的git publish-branch

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

    1
    2
    3
    4
    5
    6
    7
    8
    #!/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通常是origin(您可以修改脚本以将origin作为默认值,等等…)


    通过从现有分支分支分支来创建新分支的步骤

    1
    git checkout -b <new_branch>

    然后使用

    1
    git push -u origin <new_branch>

    这将创建并推动所有本地提交到新创建的远程分支origin/


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

    1
    git checkout -b name_branch

    (名称ou branch,例如:master)

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

    1
    git push -u origin name_new_branch

    (名称ou new ou branch,示例:feature)


    我创建了一个别名,这样每当我创建一个新分支时,它都会相应地推送和跟踪远程分支。我在.bash_profile文件中放入了以下内容:

    1
    2
    3
    4
    5
    6
    # Create a new branch, push to origin and track that remote branch
    publishBranch() {
      git checkout -b $1
      git push -u origin $1
    }
    alias gcb=publishBranch

    用法:只需键入gcb thuy/do-sth-koolthuy/do-sth-kool是我的新分支名称。


    基于这里的回答,我将这个过程包装成一个简单的bash脚本,当然它也可以用作git别名。

    对我来说重要的一点是,这会提示我在提交之前运行单元测试,并在默认情况下以当前分支名称传递。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ git_push_new_branch.sh

      Have you run your unit tests yet? If so, pass OK or a branch name, and try again

      usage: git_push_new_branch {OK|BRANCH_NAME}

      e.g.

      git_push_new_branch           -> Displays prompt reminding you to run unit tests
      git_push_new_branch OK        -> Pushes the current branch as a new branch to the origin
      git_push_new_branch MYBRANCH  -> Pushes branch MYBRANCH as a new branch to the origin

    Git_Push_New_分支机构.sh

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    function show_help()
    {
      IT=$(CAT <<EOF

      Have you run your unit tests yet? If so, pass OK or a branch name, and try again

      usage: git_push_new_branch {OK|BRANCH_NAME}

      e.g.

      git_push_new_branch.sh           -> Displays prompt reminding you to run unit tests
      git_push_new_branch.sh OK        -> Pushes the current branch as a new branch to the origin
      git_push_new_branch.sh MYBRANCH  -> Pushes branch MYBRANCH as a new branch to the origin

      )
      echo"$IT"
      exit
    }

    if [ -z"$1" ]
    then
      show_help
    fi

    CURR_BRANCH=$(git rev-parse --abbrev-ref HEAD)
    if ["$1" =="OK" ]
    then
      BRANCH=$CURR_BRANCH
    else
      BRANCH=${1:-$CURR_BRANCH}
    fi

    git push -u origin $BRANCH

    要上载公共存储库的本地分支,需要将cd上载到公共存储库,然后使用以下代码:

    1
    git push -u origin branchname