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

StackOverflow https://stackoverflow.com/questions/2765421

質問

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

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

  2. ローカルブランチをリモートリポジトリ(公開)に押しますが、追跡可能にします。 git pullgit push すぐに動作します。

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

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

役に立ちましたか?

解決

GIT 1.7.0以降では、新しいブランチを確認できます。

git checkout -b <branch>

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

git push -u origin <branch>

Gitは、プッシュ中に追跡情報を設定します。

他のヒント

あなたがあなたのレポを他の人と共有していないなら、これはプッシュするのに役立ちます すべて あなたの枝はリモコンへ、そして --set-upstream あなたのために正しく追跡する:

git push --all -u

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

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

の導入前 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

簡単に言えば、新しいものを作成します ローカル ブランチ、します:

git branch <branch-name>

それをにプッシュする リモート リポジトリ、します:

git push -u origin <branch-name>

ここですでに与えられているソリューションのわずかなバリエーション:

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

    git checkout -b branchname
    
  2. ローカルブランチをリモートリポジトリ(公開)に押しますが、追跡可能にします。 git pullgit push すぐに動作します

    git push -u origin HEAD
    

    使用 HEAD 「現在のブランチをリモート上の同じ名前に押し込む便利な方法」です。ソース: https://git-scm.com/docs/git-pushGITの用語では、ヘッド(大文字で)は、現在のブランチ(ツリー)の上部への参照です。

    -u オプションは略です --set-setupstream. 。これにより、現在のブランチの上流追跡リファレンスが追加されます。 .git/configファイルを調べて、これを確認できます。

    Enter image description here

私は単にそうします

git push -u origin localBranch:remoteBranchToBeCreated

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

gitという名前の新しいブランチが作成されます remoteBranchToBeCreated 私のコミットの下で私はやった localBranch.

編集: :これはあなたの現在のローカル支店の(おそらく名前が付けられている可能性があります localBranch)上流 origin/remoteBranchToBeCreated. 。それを修正するには、単に入力してください。

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

したがって、現在のローカルブランチは現在追跡されています origin/localBranch 戻る。

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

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

編集 時代遅れで、使用してください git push -u origin $BRANCHNAME


使用する git publish-branch から ウィリアムのその他のgitツール (Gitorious Repoクローン).

OK、ルビーはないので、セーフガードを無視してください! - スクリプトの最後の3行を取り、バッシュスクリプトを作成します。 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, 、通常、リモートネームは起源です(スクリプトを変更して、原点をデフォルトとして取得するなど...)

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

git checkout -b <new_branch>

そして、この新しいブランチを使用してリポジトリに押します

git push -u origin <new_branch>

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

1.7以前のgitlabバージョンの場合、次のことを使用してください。

git checkout -b name_branch

(name_branch、例: master)

リモートリポジトリにプッシュするには、次のことを行います。

git push -u origin name_new_branch

(name_new_branch、例: feature)

新しいブランチを作成するたびに、それに応じてリモートブランチを押して追跡するようにエイリアスを作成しました。私は後にチャンクを入れました .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 私の新しいブランチ名です。

ここでの回答にわずかに構築されて、私はこのプロセスを単純なバッシュスクリプトとして包みました。これはもちろん、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人の急勾配でそれを行うことができます:

1. 使用 checkout ローカルブランチを作成するには:

git checkout -b yourBranchName

あなたが望むようにあなたの枝と一緒に作業してください。

2. 使用 push ブランチを自己構造化し、コードをリモートリポジトリに送信するコマンド:

git push -u origin yourBanchName

これを行うには反対的な方法がありますが、この方法は本当に簡単だと思います。

公開リポジトリの地元の支店をアップロードするには、 cd 公開リポジトリに、次のコードを使用します。

git push -u origin branchname
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top