web-dev-qa-db-ja.com

Git fetchリモートブランチ

私の同僚と私は同じリポジトリに取り組んでいますが、技術的には異なるプロジェクト用に2つのブランチに分けていますが、類似点があるため、masterから* branchにコミットしたいことがあります。

しかし、私はbranchを持っています。私の質問は、同僚がどのようにしてそのブランチを明確に引っ張ることができるでしょうか?です。

リポジトリのgit cloneは彼のためにローカルにブランチを作成しているようには見えませんが、プッシュが終了した後にそれらが実行されているのがわかります。

また、私が最初にブランチを作ったとき、私は-b checkoutをしました。 違いが大きいかどうかわからない?

$ git branch -r
Origin/HEAD -> Origin/master
Origin/daves_branch
Origin/discover
Origin/master

$ git fetch Origin discover
$ git checkout discover

これらは私が実行したコマンドです。しかし、それは間違いなく機能していません。

そのブランチをチェックアウトしてから、さまざまな共同作業者やワークステーションからのブランチの変更だけをプッシュしてコミットし直したい

1876
David

リモートブランチを追跡するローカルブランチを作成する必要があります。次のコマンドは、 daves_branch という名前のローカルブランチを作成し、リモートブランチ Origin/daves_branch を追跡します。変更をプッシュすると、リモートブランチが更新されます。

最新バージョンのgitの場合

git checkout --track Origin/daves_branch

--trackgit checkout -b [branch] [remotename]/[branch]の省略形です。ここで、[remotename]は Origin 、この場合は[branch]は2倍同じです。 daves_branch です。

Git 1.5.6.5ではこれが必要でした。

git checkout --track -b daves_branch Origin/daves_branch

Git 1.7.2.3以降ではこれで十分です(もっと早く開始したかもしれませんが、これは私がすぐに見つけることができる最も早い確認です):

git checkout daves_branch

最近のgitバージョンでは、このコマンドはローカルブランチを作成せず、あなたを 'detached HEAD'状態にします。ローカルブランチが必要な場合は、--trackオプションを使用してください。ここに完全な詳細: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches

2569
ralphtheninja

fetch に続いて checkout を使用しました...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

...ここで<rbranch>はリモートブランチまたはソースrefであり、<lbranch>はまだnon-existentローカルブランチまたはdestination ref追跡したいもので、おそらくリモートブランチまたはソースrefと同じ名前を付けたいもの。これについては、<refspec>の説明の options で説明されています。

Gitは非常に賢いので、リモートブランチの最初の数文字の後にItabがあれば、最初のコマンドを自動的に完了します。 IE:ローカルブランチに名前を付ける必要はありません。Gitはリモートブランチの名前を自動的にコピーします。ありがとうGit!

また、 この同様のSO投稿の回答 が示すように、fetchでローカルブランチに名前を付けなくても、-bフラグを使用してチェックアウトするときに作成できます。 。IE:git fetch <remote> <branch>に続くgit checkout -b <branch> <remote>/<branch>は、最初の回答とまったく同じです。そして明らかに、レポジトリにが1つしかないリモートがある場合、fetchの後にgit checkout <branch>を実行するだけで、ローカルブランチが作成されます。EG:リポジトリを複製し、リモートから追加のブランチをチェックアウトしたい。

fetchのドキュメントの一部は、 pull から逐語的にコピーされた可能性があると思います。特に、 options<refspec>に関するセクションは同じです。ただし、fetchmerge になるとは思わないので、コロンの宛先側を空のままにするとfetchは何もしないはずです

注:git fetch <remote> <refspec>git fetch <remote> <refspec>:の短縮形であり、したがって何もしませんが、git fetch <remote> <tag>は、リモートのgit fetch <remote> <tag>:<tag>をローカルにコピーする<tag>と同じです。

これは、リモートブランチをローカルにコピーしたいが、すぐにチェックアウトする必要がない場合にのみ役立つと思います。それ以外の場合は、 上記の承認済みの回答 を使用します。これについては、 checkout description の最初のセクションで説明し、後で説明の options セクションで説明します--trackの1ライナーであるため。えーと...1ライナーの並べ替え。まだ最初にgit fetch <remote>を実行する必要があるため。

参考:<refspecs>(source:destination)の順序は、 リモートブランチを削除する のGit-1.7以前の奇妙なメソッドを説明しています。 IE:宛先refspecに何もプッシュしません。

884
Mark Mikofski

新しいリモートブランチ(ローカルには存在し、ローカルには存在しない)を「チェックアウト」しようとしている場合は、次のようになります。

git fetch Origin
git checkout --track Origin/<remote_branch_name>

これは Origin から取得したいと仮定しています。そうでない場合は、 Origin をあなたの remote の名前に置き換えてください。

319
paneer_tikka

ローカルではなくリモートに存在するmyBranchをチェックアウトするには - これは私にとってはうまくいった:

git fetch --all
git checkout myBranch

私はこのメッセージを受け取りました:

Branch myBranch set up to track remote branch myBranch from Origin
Switched to a new branch 'myBranch'
101
David

すべてのリモートとそのブランチを表示するには、git branch -a(ローカルブランチとリモートブランチの両方)またはgit branch -r(リモートブランチのみ)を使用します。その後、リモートに対してgit checkout -t remotes/repo/branchを実行してローカルブランチを作成できます。

そのリモートのすべての参照とタグを見るためのgit ls-remoteコマンドもあります。

45
Daniel Lee

タイトルと質問が混同されています:

  • Git fetchリモートブランチ
  • 同僚がどのようにしてそのブランチを明確に引っ張ることができますか。

問題がどうやってリモートブランチを動作させることができるのか、またはリモートブランチをチェックアウトする方法について質問するなら、もっと簡単な解決策は:

Git(> = 1.6.6)を使えば、あなたは使うことができます:

git checkout <branch_name>

ローカルの<branch_name>が見つからないが、名前が一致する1つのリモートに追跡ブランチが存在する場合は、次のように処理します。

git checkout -b <branch_name> --track <remote>/<branch_name>

git checkoutのドキュメントを参照

あなたの友達のために:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
36
git checkout -b serverfix Origin/serverfix

これは、gitが--trackの短縮形を提供するのに十分な一般的な操作です。

git checkout --track Origin/serverfix

実際、これは非常に一般的なので、そのショートカットにもショートカットがあります。チェックアウトしようとしているブランチ名(a)が存在せず、(b)1つのリモコンの名前と完全に一致する場合、Gitはトラッキングブランチを作成します。

git checkout serverfix

ローカルブランチをリモートブランチとは異なる名前で設定するには、最初のバージョンを異なるローカルブランチ名で簡単に使用できます。

git checkout -b sf Origin/serverfix

今、あなたのローカルブランチsfは自動的にOrigin/serverfixから引き出されます。

出典: Scott ChaconとBen Straubによって書かれたPro Git 2nd Edition (読みやすくするためにカット)

27
ManuelSchneid3r

この簡単なコマンドで:

git checkout -b 'your_branch' Origin/'remote branch'
20

それをする最も簡単な方法は、少なくとも私にとっては:

git fetch Origin <branchName>
13
James Rochabrun

あなたもワンショットでリモートブランチを取得してチェックアウトすることができます -

git fetch && git checkout the-branch-name
13
Kumar Sambhav
git fetch

git branch -r

git checkout <branch_name>
13
John Rodriguez

私がタイプした

git checkout <branch_name>

そして得た

Branch <branch_name> set up to track remote branch <branch_name> from Origin.
Switched to a new branch '<branch_name>'
11

私を助けたのは

1)利用可能なすべてのリモートブランチを表示する(例: 'remote-branch-name')

git branch -r

2)リモートブランチ名を使ってローカルブランチを作成する

git fetch && git checkout 'remote-branch-name'
10
Arlan T

時々、あなたはマスターブランチをいじらないで、リモートブランチだけを動かすように頼まれます(私が求められたように)。だから必要なのはリモートブランチだけです。

リモートブランチを単独で(マスターなしで)クローンするには、こうします。

git clone url --branch remote_branch_name

remote_branch_nameは、リモートブランチの名前です。

例えば、

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15

これにより、リモートブランチの名前を使用して、リモートブランチをローカルブランチに確実に複製できます。

コードをコミットしてプッシュすると、コードはそのブランチにのみ送信されます。

9
ganezdragon

git fetch --all & git checkout <branch name>

7
Jerome Anthony

あなたのリモコンは[email protected]で、random_branchブランチが欲しいとしましょう。プロセスは次のとおりです。

  1. まずあなたのリモコンのリストを確認してください。

    git remote -v

  2. 上記のコマンドの出力に[email protected]リモートがない場合は、次のように追加します。

    git remote add xyz [email protected]

  3. 今、あなたはによってそのリモートのコンテンツを取得することができます。

    git fetch xyz

  4. 今度はでそのリモートのブランチをチェックしてください。

    git checkout -b my_copy_random_branch xyz/random_branch

  5. でブランチリストを確認してください

    git branch -a

ローカルブランチmy_copy_random_branchは、リモートのrandom_branchブランチを追跡します。

6
zafar142003

git fetch && git checkout <your friend's branch name>がうまくいくはずです

5
tambakoo

すべてのリモートブランチをあなたのlocalにフェッチし、新しく作成したローカルブランチに切り替えるためのonelinerコマンドを与えたいと思います。

git fetch && git checkout discover

上記のコマンドを実行した後、メッセージの下に表示されます。

Switched to a new branch 'discover'
Branch discover set up to track remote branch discover from Origin.

最初の行には、 新しいブランチに切り替えました - なぜ新しいのですか?それはもうリモートにあります!.

しかし、実際にはローカルにも作成する必要があります。ブランチはリモートインデックスから取得され、ローカルに作成されます。

ここでdiscoverはあなたのリポジトリのリモートブランチdiscoverから作られた新しいブランチです。

しかし、2行目は、最初の行よりも多くの情報を提供します。

私たちのブランチは同じ名前でリモートブランチを追跡するように設定されています。

git fetchはすべてのbranchをローカルにフェッチしますが、その後にgit branchを実行した場合、local なぜにはmasterブランチしか表示されません。

上記の例で行ったようにgit checkout <branchname>として追跡するためには、リモートにあるすべてのブランチに対してローカルにも作成する必要があるためです。

git checkoutコマンドを実行した後、git branchを実行することができます今、あなたは両方のブランチを見ることができます:

  1. マスターと2。あなたの地元のリスティングで発見。
3
Haritsinh Gohil

手順は次のとおりです。

  1. git fetch Originまたはgit fetch --all、これはあなたのローカルへのすべてのリモートブランチを取得し、次にこれがあなたが進むことができる2番目のオプションです。

  2. git checkout --track Origin/<The_remote_branch you want to switch over>

それからこの枝に取り組み、あなたはあなたがその枝にいるかどうか確かめることができる

git branch

あなたが現在いるブランチが表示されます。

3
Sam

単純に試す

$ git pull Originあなたのブランチ名

3
Rizo

あなたがすでにあなたのリモートブランチを知っているのであれば….

git remote
=> One
=> Two

そして、あなたはあなたがexをチェックアウトしたい支店名を知っています。 br1.2.3.4 その後

git fetch One
=> returns all meta data of remote i.e. the branch name in question.

残っているのはブランチをチェックアウトすることだけです

git checkout br.1.2.3.4

それからそれから新しい分岐を作る。

3
SoEzPz

すべてのリモートブランチを取得したい場合は、単に入力してください

git fetch --all

他の誰かがすべてのリモートブランチを見るのに役立つことを願っています。

3
Ishwor Khanal

あなたの.git/configをチェックしてください、特にそのリモートの fetch にどんな追跡があるのか​​。

[remote "randomRemote"]
    url = [email protected]:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

heads/*randomRemote/*を指している場合、git fetch randomRemoteを実行すると、すべてのブランチが取得されます。それからあなたはただその枝をチェックアウトすることができます。

さもないと、

  1. これを使ってトラッキングにリモートブランチを追加する必要があります。これを実行した後あなたの.git/configをチェックしてください。あなたは理解するでしょう。 gitリモートセットブランチ--add randomRemote randomBranch

  2. git fetch randomRemoteを実行してください。これはリモートブランチを取得します。

  3. これでgit checkout randomBranchを実行できます

2
Vamshi Suram

--depth 1で複製されたリポジトリがある場合、リストされているコマンドの多くは機能しません。例えばこちら

% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch Origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
 * branch            other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%

この場合はリポジトリを再クローンしますが、おそらく他の手法もあります。 git shallow clone(clone --depth)がリモートブランチを見逃す

2
Colin D

リモートに存在するブランチを取得するための最も簡単な方法は次のとおりです。

git checkout branchName

これはあなたのローカルにリモートブランチを取得し、自動的にリモートブランチを追跡します。

2
Harshit Agarwal

git branch <name> --track Origin/<name>

1
Chris F Carroll

あなたはあなたの枝を分離しておくために 'git pull'を使います。 'lbranch'と 'rbranch'は解読が難しいので、実際のリポジトリ名とブランチ名を使用して説明します。

使用しましょう:

  • myteam.unfuddle.com =リモートGitサーバー
    • tlc =リポジトリが存在するプロジェクトアカウントを解読しない
    • daves_branch =リモートブランチ名

      支店がいくつあっても、あなたや同僚はこれを実行して自分の支店のみを引っ張ることができます。

       git init 
       git pull [email protected]:myteam/tlc daves_branch:refs/remotes/Origin/daves_branch 
      
  • 1
    Andrew

    簡単なコマンド - "git checkout remote_branch_name"は、リモートブランチにすべての変更を加えたローカルブランチを作成するのに役立ちます。

    0
    SjK