5083

私は次のことができるようになりたいです:

  1. 他の(リモートまたはローカル)ブランチに基づいてローカルブランチを作成します(git branchまたはを介してgit checkout -b

  2. ローカルブランチをリモートリポジトリにプッシュします(公開)が、追跡可能にしてgit pullすぐgit pushに機能します。

それ、どうやったら出来るの?

--set-upstream私はGit1.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
    

    を使用するHEADと、「現在のブランチをリモートの同じ名前にプッシュする便利な方法」になります。出典: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

すでにクローンされたプロジェクトに対して。

remoteBranchToBeCreatedGitは、で行ったコミットの下に名前が付けられた新しいブランチを作成し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


Williamのその他のGitツールgit publish-branchから使用します。

OK、Rubyはないので、セーフガードを無視します。-スクリプトの最後の3行を取得し、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. サーバーで「gitbare--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

新しいブランチを作成するたびに、それに応じてリモートブランチをプッシュおよび追跡するように、エイリアスを作成しました。次のチャンクを.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

使用法:「with」と入力gcb thuy/do-sth-koolするだけthuy/do-sth-koolで、新しいブランチ名になります。

于 2016-01-05T10:11:01.540 に答える
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"

重要:マスターから更新を取得します。

git pull origin feature-branch

次に、ローカルの変更をプッシュします。

git push origin feature-branch
于 2021-09-06T10:58:31.640 に答える
10

あなたは2つのスティープでそれを行うことができます:

1.を使用しcheckoutて、ローカルブランチを作成します。

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 に答える