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

时间:2010-05-04 12:58:35

标签: git repository git-branch git-push git-remote

我希望能够做到以下几点:

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

  2. 推送本地分支 到远程存储库(发布),但做到了 可追踪,以便git pullgit push立即生效。

  3. 我该怎么做?

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

17 个答案:

答案 0 :(得分:6206)

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

git checkout -b <branch>

编辑文件,添加和提交。然后push with the -u (short for --set-upstream)选项:

git push -u origin <branch>

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

答案 1 :(得分:468)

如果您不与他人分享您的回购,这对于将所有您的分支机构推送到远程分机以及--set-upstream正确跟踪您来说非常有用:

git push --all -u

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

如果你与他人分享你的回购,这不是一个非常好的形式,因为你将用你所有狡猾的实验分支堵塞回购。

答案 2 :(得分:140)

在引入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

答案 3 :(得分:119)

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

git branch <branch-name>

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

git push -u origin <branch-name>

答案 4 :(得分:78)

这里给出的解决方案略有不同:

  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文件来验证这一点:

    Enter image description here

答案 5 :(得分:33)

我只是做

git push -u origin localBranch:remoteBranchToBeCreated

已经克隆过的项目。

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

答案 6 :(得分:29)

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

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

    git checkout -b <newbranch>
    
  2. 假设您在服务器上创建了“git bare --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
    
  4. 注意:我假设您的服务器已启动并正在运行。如果不是,它将无法工作。一个很好的操作方法是here

    ADDED

    添加远程分支:

    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
    

答案 7 :(得分:22)

修改过时,只需使用git push -u origin $BRANCHNAME

即可

使用William's miscellaneous Git toolsgitorious 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通常是原点(您可以修改脚本以将原点作为默认值等等)。

答案 8 :(得分:20)

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

git checkout -b <new_branch>

然后使用

将此新分支推送到存储库
git push -u origin <new_branch>

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

答案 9 :(得分:10)

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

git checkout -b name_branch

(name_branch,例如:master

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

git push -u origin name_new_branch

(name_new_branch,例如:feature

答案 10 :(得分:8)

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

# 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就是我的新分支名称。

答案 11 :(得分:2)

稍微根据答案构建,我已将此过程包装为一个简单的Bash脚本,当然也可以用作Git别名。

对我来说,重要的补充是这提示我在提交之前运行单元测试并默认传递当前分支名称。

$ 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_branch.sh

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

答案 12 :(得分:0)

您可以在2个陡峭的山坡上完成它:

1。。使用checkout创建本地分支:

git checkout -b yourBranchName

根据需要与分支机构合作。

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

git push -u origin yourBanchName
  

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

答案 13 :(得分:0)

为获得最大的灵活性,您可以使用custom Git command。例如,在$PATHgit-publish的某个位置创建以下Python脚本,并将其可执行:

#!/usr/bin/env python3

import argparse
import subprocess
import sys    

def publish(branch, remote):
    return subprocess.run(['git', 'push', '--set-upstream', remote, branch]).returncode    

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Push and set upstream for a branch')
    parser.add_argument('-r', '--remote', default='origin',
                        help="The remote name (default is 'origin')")
    parser.add_argument('-b', '--branch', help='The branch name (default is whatever HEAD is pointing to)',
                        default='HEAD')
    args = parser.parse_args()

    sys.exit(publish(args.branch, args.remote))

然后git publish -h将为您显示使用情况信息:

usage: git-publish [-h] [-r REMOTE] [-b BRANCH]

Push and set upstream for a branch

optional arguments:
  -h, --help            show this help message and exit
  -r REMOTE, --remote REMOTE
                        The remote name (default is 'origin')
  -b BRANCH, --branch BRANCH
                        The branch name (default is whatever HEAD is pointing to)

答案 14 :(得分:0)

我认为这是最简单的别名,添加到您的 ~/.gitconfig

[alias]
  publish-branch = !git push -u origin $(git rev-parse --abbrev-ref HEAD)

你就跑

git publish-branch

然后...它发布分支

答案 15 :(得分:-2)

要将新的本地git存储库推送到远程git存储库:

  1. 在github上创建git存储库
  2. 在本地存储库中,执行以下操作:
    1. git init
    2. git remote add origin <YOUR_GIT_REPO>
    3. git push -u origin master

答案 16 :(得分:-7)

To upload your local branch of a public repository, you need to cd to the public repository and then use the following code:

git push -u origin branchname