web-dev-qa-db-ja.com

GitはGitHubから特定のブランチを引っ張ります

複数の支店を持つプロジェクトがあります。私はそれらを GitHub にプッシュしてきました、そして今他の誰かがGitHubから彼らのブランチを引っ張る必要があるプロジェクトに取り組んでいるので。マスターではうまくいきます。しかし、誰かがブランチxyzを作成したとしましょう。どうすればGitHubからブランチxyzを取得し、それを私のxyzのブランチlocalhostにマージすることができますか?

私は実際に私の答えをここに持っている:Gitでプッシュとプルの分岐

しかし、 "![rejected]"というエラーと、 "早送りではない"というエラーが表示されます。

助言がありますか?

524
tybro0103

しかし、 "![rejected]"というエラーと、 "早送りではない"というエラーが表示されます。

これは、Gitがブランチからの変更を現在のマスターにマージできないためです。ブランチmastername__をチェックアウトし、リモートブランチother-branchにマージしたいとしましょう。これをするとき:

$ git pull Origin other-branch

Gitは基本的にこれをやっています:

$ git fetch Origin other-branch && git merge other-branch

つまり、pullname__は単なるfetchname__とそれに続くmergename__です。しかし、_ pullname _ _ingを実行すると、Gitはonlyマージします_ other-branchif早送りマージを実行できます。 fast-forwardマージは、マージしようとしているブランチの先頭が、マージしたいブランチの先頭の直接の子孫であるマージです。たとえば、この履歴ツリーがある場合、other-branchをマージすると早送りマージが行われます。

O-O-O-O-O-O
^         ^
master    other-branch

ただし、これはnotになることは早送りになります。

    v master
O-O-O
\
 \-O-O-O-O
         ^ other-branch

あなたの問題を解決するには、まずfetchでリモートブランチを取得します。

$ git fetch Origin other-branch

それを現在のブランチにマージし(mastername__と仮定します)、マージの競合を修正します。

$ git merge Origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit    # And commit the merge!
620
mipadi

リモートブランチを明示的に追跡するだけで、簡単なgit pullであなたが望むことができます。

git branch -f remote_branch_name Origin/remote_branch_name
git checkout remote_branch_name

後者はローカル操作です。

あるいはフォークに関する GitHubドキュメンテーションにさらに適合する

git branch -f new_local_branch_name upstream/remote_branch_name
275
innaM

次のコマンドで枝を枝に引っ張ることができます。

git pull {repo} {remotebranchname}:{localbranchname}

git pull Origin xyz:xyz

あなたがマスターブランチにいるとき、あなたは最初に次のようにブランチをチェックアウトすることもできます:

git checkout -b xyz

これはマスターから新しいブランチ "xyz"を作成し、それを直接チェックアウトします。

それからあなたはします:

git pull Origin xyz

これは新しいブランチをあなたのローカルのxyzブランチに引っ張ります。

104
Robert Cabri

最善の方法は次のとおりです。

git checkout -b <new_branch> <remote repo name>/<new_branch>
81
mohit

git fetchは最新のブランチのリストを取得します。

git checkout MyNewBranchできます

完了:)


詳しくはdocsを見てください: git fetch

34
Bradley Flood

私は問題を完全に理解しているかどうかわからないが、既存のブランチを引っ張ることはこのようにして行われる(少なくともそれは私のために働く:)

git pull Origin BRANCH

これはあなたのローカルブランチがOrigin/BRANCHから作成されたと仮定しています。

30
Alex N.

これは私がそれを他のものにマージする前にリモートブランチを取得するのを助けました:

git fetch repo xyz:xyz
git checkout xyz
11
git pull <gitreponame> <branchname>

通常、リポジトリにコードを割り当てただけの場合、gitreponameはOriginになります。

1つがローカルでもう1つがリモートであるように、2つのリポジトリで作業している場合は、 git remote -v からリポジトリのリストを確認できます。これは、現在のコードに割り当てられているレポの数を示しています。

BranchNameは対応するgitreponameに存在する必要があります。

次の2つのコマンドを使ってリポジトリの追加や削除ができます。

git remote add <gitreponame> <repourl>
git remote remove <gitreponame>
2
prathap

あなたもするかもしれません

git pull -r Origin master

もしあればマージの競合を修正

git rebase --continue

-rはリベース用です。これはあなたからブランチ構造を作るでしょう

        v  master       
o-o-o-o-o
     \o-o-o
          ^ other branch

        v  master       
o-o-o-o-o-o-o-o
              ^ other branch

これはよりきれいな歴史につながるでしょう。注意:もう一方のブランチをOrigin(または他のリモート)に既にプッシュしている場合は、リベース後にブランチをプッシュする必要があります。

git Push -f Origin other-branch
1
PKV

簡単に言えば、GitHubからブランチthe_branch_I_wantを取得したい場合は、

git fetch Origin
git branch -f the_branch_I_want Origin/the_branch_I_want
git checkout the_branch_I_want
0
Adrien Renaud

やった

git branch -f new_local_branch_name Origin/remote_branch_name

の代わりに

git branch -f new_local_branch_name upstream/remote_branch_name

@innaMが示唆しているように。私がアップストリームバージョンを使用したとき、それは言った '致命的:無効なオブジェクト名:' upstream/remote_branch_name ''。私はコメントが示唆するようにgit fetch Originをしませんでしたが、代わりに単にupstreamOriginに置き換えました。それらは同等であると思います。

0
Vicky