web-dev-qa-db-ja.com

新しいローカルブランチをリモートのGitリポジトリにプッシュして追跡するにはどうすればいいですか?

私は次のことができるようにしたいです。

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

  2. ローカルブランチをリモートリポジトリにプッシュ(公開)しますが、追跡可能にするとgit pullgit Pushはすぐに動作します。

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

Git 1.7では--set-upstreamを知っていますが、それは作成後のアクションです。私はブランチをリモートリポジトリにプッシュするときに同様の変更を加える方法を見つけたいと思います。

3956
Roni Yaniv

Git 1.7.0以降では、新しいブランチをチェックアウトできます。

git checkout -b <branch>

ファイルを編集し、追加してコミットします。それから -uを押します(--set-upstreamの略) オプション:

git Push -u Origin <branch>

Gitはプッシュ中にトラッキング情報を設定します。

6188
Daniel Ruoso

あなたが他の人とあなたのレポを共有していないのであれば、これは all あなたのブランチをリモートにプッシュし、あなたのために--set-upstreamトラッキングするのに役立ちます:

git Push --all -u

(正確にはOPが求めていたものではありませんが、このワンライナーはかなり人気があります)

あなたが他の人とあなたのレポを共有しているなら、あなたがすべてのあなたの危険な実験的な枝でレポを詰まらせるので、これは本当に良い形式ではありません。

470
ErichBSchulz

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
140
Lohrun

簡単に言えば、新しい local ブランチを作成するには、次のようにします。

git branch <branch-name>

remote リポジトリにプッシュするには、次のようにします。

git Push -u Origin <branch-name>
119
piyushmandovra

すでにここに与えられている解決策のわずかな変形:

  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

78
bg17aw

私は単にする

git Push -u Origin localBranch:remoteBranchToBeCreated

すでにクローンされたプロジェクトに.

remoteBranchToBeCreatedで行ったコミットの下で、GitはlocalBranchという名前の新しいブランチを作成します。

32
Arda

私はあなたがすでに次のようなプロジェクトを複製したと思います:

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

すべてがうまくいっているかチェックしてください(Originを取得してリモートブランチをリストします):

git fetch Origin
git branch -r

ローカルブランチを作成してリモートブランチを追跡します。

git checkout -tb new_feature_name Origin/new_feature_name

すべてを更新する:

git pull
29
VP.

編集 古い、git Push -u Origin $BRANCHNAMEを使う


Williamの雑多なGitツールgitorious repo および clone )からgit publish-branchを使用してください。

さて、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をデフォルトにするようにスクリプトを修正することができます、など)。

22
Tobias Kienzler

既存のブランチから分岐して新しいブランチを作成する

git checkout -b <new_branch>

次に、この新しいブランチを使ってリポジトリにプッシュします。

git Push -u Origin <new_branch>

これはすべてのローカルコミットを作成し、新しく作成されたリモートブランチにプッシュしますOrigin/<new_branch>

19
cptjack

GitLabのバージョンが1.7より前の場合は、次のようにします。

git checkout -b name_branch

(name_branch、例:master

それをリモートリポジトリにプッシュするには、次の手順に従います。

git Push -u Origin name_new_branch

(name_new_branch、例:feature

10
Fadid

エイリアスを作成して、新しいブランチを作成するたびにリモートブランチをプッシュして追跡するようにしました。次のチャンクを.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-koolと入力してthuy/do-sth-koolが私の新しいブランチ名になります。

8
Thuy Trinh

ここでの答えを少し土台にして、このプロセスを単純な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
2
Brad Parks