5083

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

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

  2. 将本地分支推送到远程存储库(发布),但使其可跟踪git pull并且git push将立即工作。

我怎么做?

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

4

16 回答 16

7684

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

git checkout -b <branch>

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

git push -u origin <branch>

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

于 2011-06-03T20:50:29.507 回答
541

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

git push --all -u

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

如果您与其他人共享您的存储库,这不是一个很好的形式,因为您将使用所有狡猾的实验分支阻塞存储库。

于 2014-01-20T11:36:42.797 回答
207

在引入 之前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
于 2010-05-04T13:03:09.057 回答
162

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

git branch <branch-name>

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

git push -u origin <branch-name>
于 2015-04-24T12:09:13.380 回答
128

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

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

    git checkout -b branchname
    
  2. 将本地分支推送到远程存储库(发布),但使其可跟踪git pull并且git push将立即工作

    git push -u origin HEAD
    

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

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

    在此处输入图像描述

于 2016-07-05T08:13:08.300 回答
96

我只是做

git push -u origin localBranch:remoteBranchToBeCreated

在一个已经克隆的项目上。

GitremoteBranchToBeCreated在我在localBranch.

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

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

或者

git branch -u origin/localBranch

因此,您当前的本地分支机构现在可以origin/localBranch追溯。

于 2017-03-20T11:13:21.977 回答
37

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


git publish-branchWilliam 的杂项 Git 工具中使用。

好的,没有 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 通常是 origin(您可以修改脚本以将 origin 作为默认值,等等...)

于 2010-05-04T13:03:17.590 回答
35

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

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
    

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

添加

添加远程分支:

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
于 2010-05-04T13:04:16.293 回答
30

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

git checkout -b <new_branch>

然后使用将这个新分支推送到存储库

git push -u origin <new_branch>

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

于 2015-06-03T20:36:39.190 回答
15

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

git checkout -b name_branch

(name_branch,例如master:)

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

git push -u origin name_new_branch

(name_new_branch,例如feature:)

于 2016-12-06T18:42:56.433 回答
11

将本地更改推送到新功能分支的完整 Git 工作流程如下所示

拉取所有远程分支

git pull --all

立即列出所有分支

git branch -a  

结帐或创建分支(替换<feature branch>为您的分支名称):

git checkout -b <feature branch>

显示当前分支。必须在前面显示 *

git branch      

添加您的本地更改(这里是故意的)

git add .

现在提交您的更改:

git commit -m "Refactored/ Added Feature XYZ"

重要提示:从 master 获取更新:

git pull origin feature-branch

现在推送您的本地更改:

git push origin feature-branch
于 2021-09-06T10:58:31.640 回答
11

我创建了一个别名,这样每当我创建一个新分支时,它就会相应地推送和跟踪远程分支。我将以下块放入.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新分支名称。

于 2016-01-05T10:11:01.540 回答
10

你可以在两个陡峭的地方做到这一点:

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

git checkout -b yourBranchName

随心所欲地使用您的分支机构。

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

git push -u origin yourBanchName

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

于 2019-10-02T10:11:34.507 回答
7

稍微建立在此处的答案之上,我将这个过程包装为一个简单的 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
于 2017-04-21T13:30:31.090 回答
4

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

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

你只要跑

git publish-branch

并且...它发布了分支

于 2021-01-16T02:54:32.343 回答
3

为了获得最大的灵活性,您可以使用自定义 Git 命令。例如,在您$PATH的名称下的某处创建以下 Python 脚本git-publish并使其可执行:

#!/usr/bin/env python3

import argparse
import subprocess
import sys


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


def parse_args():
    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')
    return parser.parse_args()


def main():
    args = parse_args()
    return publish(args)


if __name__ == '__main__':
    sys.exit(main())

然后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)
于 2019-12-31T13:47:54.273 回答