リモートGitブランチをチェックアウトするにはどうすればよいですか?


6713

誰かが呼び出されたブランチを共有リポジトリにプッシュtestgit push origin testました。で枝が見えgit branch -rます。

今、私はリモートtestブランチをチェックアウトしようとしています。

私はもう試した:

  • git checkout test 何もしません

  • git checkout origin/test与え* (no branch)ます。混乱しています。「ブランチなし」にするにはどうすればよいですか?

リモートGitブランチをチェックアウトするにはどうすればよいですか?


9
@ingerしかし、新しいローカルブランチの名前を変更する可能性は含まれていません(後で--set-upstreamを付けて、名前の一貫性を保ちたい場合)
fachexot

15
このスレッドは役に立たないと思います。何も機能していないようです。元の質問は多くの回答で失われているようです。私はすべての単語を読み、以下のすべてを試しましたが、OPがやりたいことをどのように行うかわかりません。
トニー・エニス

6
Gitコマンドは最初は直感的ではなく、最近のバージョンで導入された変更をミックスに追加すると、このページが表示されます...
Christophe Roussy

14
狂った薬を飲んでいるような気がします。私はからupstreamだけでなく、からブランチをチェックアウトしようとしoriginています。推奨されるすべての回答では、リモートで役立つことは何もありません(意図的ではありません)。編集 -すみません、上位2つの回答に含まれる多数の提案は役に立たなかった。3番目(git branch test origin/test)が機能します。トップ2の投票数が20倍になったことを
嬉しく思い

4
作業ツリーに「test」という名前のファイルがある可能性があります。詳細については、stackoverflow.com / a / 45006389/792416を参照してください。
オールドマン2017

回答:


9151

更新

ヤクブの答えは実際にこれを改善します。Gitバージョンが1.6.6以上で、リモートが1つだけの場合、次のことができます。

git fetch
git checkout test

ユーザーmasukomiがコメントで指摘しているように、複数のリモートがあるgit checkout test場合、最新のgitでは動作しません。この場合は

git checkout -b test <name of remote>/test

または略記

git checkout -t <name of remote>/test

古い答え

リモートブランチでローカルで作業を開始する前に、以下の回答で呼び出されているとおりにフェッチする必要があります。

ブランチを取得するには、次の手順を実行するだけです。

git fetch origin

これにより、すべてのリモートブランチがフェッチされます。あなたはチェックアウトに利用可能なブランチを見ることができます:

git branch -v -a

リモートブランチが手元にあるので、次に、目的のブランチをチェックアウトして、ローカルの作業コピーを提供する必要があります。

git checkout -b test origin/test

398
これをさらに詳しく説明すると、gitでは他の誰かのブランチで作業することはできません。自分だけで作業できます。したがって、他の誰かのブランチに追加したい場合は、そのブランチの独自の「コピー」を作成する必要があります。これは、上記のコマンドが行うことです(まあ、それはあなたのブランチを作成してチェックアウトします)。
ダン成形

139
新しいリモートブランチの場合はgit fetch、gitが認識できるように、これを行う前に必要になる場合がありますorigin/test
Neil Sarkar

56
...そして、これを行うにはgit fetch origin test
Andrew

22
エラー:「git checkout:パスの更新はブランチの切り替えと互換性がありません。origin/testコミットとして解決できないチェックアウトを行うつもりでしたか?」
Xeoncross 2012

85
git checkout test同じブランチ名を持つリモートが複数ある場合、最新のgitでは動作しません。どちらを使用するかわかりません。
ますこみ2014

1256

補足:最新のGit(> = 1.6.6)を使用すると、

git checkout test

(それは 'origin / test'ではなく 'test'であることに注意してください)魔法のDWIM -mery を実行し、ローカルブランチ 'test'を作成します。そのためのアップストリームはリモート追跡ブランチ 'origin / test'です。


* (no branch)git branch出力手段は、あなたは、いわゆる「デタッチHEAD」の状態で(HEADポイントが直接コミット、およびいくつかのローカルブランチへのシンボリック参照ではないため)、無名の枝の上にあること。この名前のないブランチでいくつかのコミットを行った場合は、常に現在のコミットからローカルブランチを作成できます。

git checkout -b test HEAD

**編集(編集者ではなく作成者)**

私はこの答えを現代化しているように見える下に埋められたコメントを見つけました:

@Dennis:git checkout、たとえばgit checkout origin / testは切り離されたHEAD /名前のないブランチになりますが、git checkout testまたはgit checkout -b test origin / testはローカルブランチテストになります(リモートトラッキングブランチorigin / testをアップストリームとして使用) )– JakubNarębski2014年1月9日8:17

を重要視する git checkout origin/test


33
当然のことですが、このバージョンは過去数年でリリースされています。この構文を知っていると、古いドキュメントやコメントスレッドがまだたくさんあるため、時間を節約できます。
カーティス

10
"modern git"-記録として、(おおよそ)どのバージョンを参照していますか?古いディストリビューションを実行しているシステムで作業する必要がある場合があります。
Craig McQueen

5
このコンテキストでの「モダンgit」はgit 1.6.6です
Bobby Norton

10
@aidanこのような応答を受け取った場合error: pathspec 'branch_name' did not match any file(s) known to git.は、最初にgit fetchを実行する必要があります。
Dennis

6
gitバージョン1.8.3.msysgit.0を使用すると、これは機能しません-gitが認識しているファイルと一致しませんでした-私は多くのgitフェッチを実行しました
PandaWood

565

この場合、おそらくtestリモートtestブランチを追跡するローカルブランチを作成する必要があります。

$ git branch test origin/test

の以前のバージョンではgit、明示的な--trackオプションが必要でしたが、リモートブランチから分岐するときのデフォルトがそれです。


15
これにより、ローカルブランチに切り替えずに作成されます。
Alex Skrypnyk 2013年

2
致命的なエラーが発生しましたが、あいまいなオブジェクト名: 'origin / dev'-originのブランチ 'dev'が最も確実に存在します-しかし、(以前の愚かな試みで)誤って「origin / dev」というブランチをマシンに作成しましたこれを正しくするために、間違いなく)... ouch
PandaWood 2013

1
これは私にエラーエラーを与えてきました:ヒントにいくつかの参照をプッシュすることに失敗しました:プッシュされたブランチのヒントがそのリモートのヒント:カウンターパートの背後にあるため、更新は拒否されました。このブランチを確認して、リモートの変更のヒント(例: 'git pull')をマージしてから、もう一度プッシュしてください。ヒント:詳細については、「git push --help」の「早送りに関する注意」を参照してください。
pal4life 2014年

475

受け入れられた答えはあなたのために機能しませんか?

最初の選択された答えは技術的に正しいですが、リモートリポジトリからすべてのオブジェクトと参照をまだ取得していない可能性があります。その場合、次のエラーが表示されます。

$ git checkout -b remote_branch origin/remote_branch

fatal:git checkout:パスの更新はブランチの切り替えと互換性がありません。
コミットとして解決できない 'origin / remote_branch'をチェックアウトするつもりでしたか?

解決

このメッセージが表示されたgit fetch origin場合originは、を実行する前に、最初にwhere を実行してリモートリポジトリの名前を指定する必要がありますgit checkout remote_branch。以下は、応答の完全な例です。

$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> origin/develop
 * [new branch]      demo       -> origin/demo
   d80f8d7..359eab0  master     -> origin/master

$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'

ご覧のとおり、runningを実行git fetch originすると、ローカルマシンで追跡するようにセットアップされていないリモートブランチが取得されます。そこから、リモートブランチへの参照が作成されたので、実行するだけgit checkout remote_branchでリモートトラッキングのメリットを得ることができます。


2
ローカルに別のブランチがある場合は、メモを追加します。 'git remote add origin [the_path_to_your_repo / repo_name.git]'を使用して、これをリモートリポジトリに関連付けていることを確認してください。次に、「git fetch origin」を使用します。「origin」は、関連付けを行ったオリジンリポジトリを意味します。
elliotrock 2015

git checkout -b newbranchまた、現在のブランチに基づいて、1ステップで新しいブランチを作成してチェックアウトするのにも最適です。
Linus

2
これが最新だと思います($ @#!ingは変わり続けます!)。実際にGitの2.5.5は、私が唯一の方法を発見した参照リモートブランチだったgit ls-remoteと実際には1つを使用する唯一の方法はあるgit checkout -b [branch] --track [remote/branch]...それの後に git pull [remote] [branch]働きました。つまり、実際にはブランチ全体をプルしましたが、それでもリストしませんでした。
デリケートな

この答えはどちらか動作しない場合や、参照これを
e18年

追加するだけでgit fetch other_remote only_branch、あなたはまだfatalエラーが発生します。git fetch other_remoteブランチ名は必要ありません。奇妙なデザイン。
EST

258

上記の解決策を試しましたが、うまくいきませんでした。これを試してください、うまくいきます:

git fetch origin 'remote_branch':'local_branch_name'

これにより、リモートブランチがフェッチされ、名前が付いた新しいローカルブランチが作成され(まだ存在しない場合)、リモートブランチがlocal_branch_name追跡されます。


37
git fetch originまたはgit remote updateがローカルブランチを作成しなかった場合、これは私にとってはうまくいきました。理由はわかりません。
Godsmith 2014

4
これは、(マスターではなく)リモートブランチを使用して新しいブランチを作成するという、私が必要とするものを達成する最も直接的な方法でした。
Roralee、2015年

7
複数のブランチを持つリモートから単一のブランチを複製した場合は特に、シームレスに機能しました。
Alex C

7
これは私にとってもうまくいきましたが、受け入れられた回答と他の高票はそうではありませんでした。私のgitバージョンは2.5.0
pdepmcp

5
他のすべてが機能しないのにこれが機能する理由を誰かが知っていますか?(私はgit 2.13.0にいます)
Nathan Arthur

108

これは、名前の付いていないリモートのDWIM作成しますドキュメント):

$ git checkout -t remote_name/remote_branch

新しいリモコンを追加するには、最初に次のことを行う必要があります。

$ git remote add remote_name location_of_remote
$ git fetch remote_name

1つ目はGitにリモートが存在することを伝え、2つ目はコミットを取得します。


104

使用する:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

他の回答は、私の良性のケースでは、現代のGitでは機能しません。リモートブランチが新しい場合は、最初にプルする必要があるかもしれませんが、私はそのケースをチェックしていません。


2
これがこの回答の
ご存知

14
今それを見ると、彼らは重複しています。私だけが簡潔で、話をするのではなく、何をすべきかを教えてくれます。したがって、特に最近のgitバージョンの場合は、より便利になると思います。それが悪い答えだと思ったら、反対票を投じることができます。
matanster

1
git fetchは安全なオプションです。プルを使用する前にフェッチを試してください。どちらもリモートコンテンツをダウンロードしますが、フェッチではローカル状態は変更されませんが、プルではローカル状態がすぐに変更されます。
Peter Szalay

89

OK、答えは簡単です...基本的にはブランチが表示されますが、ローカルコピーはまだありません!...

あなたfetchはブランチする必要があります...

単にフェッチしてからブランチにチェックアウトし、以下の1行のコマンドを使用してそれを行うことができます。

git fetch && git checkout test

以下の画像も作成して、違いを共有し、fetch動作方法との違いを確認しpullます。

git fetch


@DmitriZaitsevはい、リモートブランチがそこにあり、フェッチを実行すると、ローカルでブランチが取得されれば機能します...そこにはすでにリモートブランチがあるという質問...
Alireza

私の質問の見方はtest、新しいブランチのように見えるので、ローカルに存在する可能性は低いです。それ以外の場合は、単一のgit pullコマンドで簡単にプルできます。
Dmitri Zaitsev

@DmitriZaitsev、はい、それが私がgit fetchと言った理由です。作成したばかりのリモートブランチをチェックすると、pullは他の不要なものを取り込む可能性がありますが、すでにローカルにリポジトリがある場合は、fetchによってすべてのブランチが利用可能になります...
Alireza

しない fetchせずpull、フェッチされたコピーでの休暇の変化ではなく、地元の支店にお近くの支店につながる最新のものではありませんか?
Dmitri Zaitsev

56

Gitリポジトリのクローンを作成するには、次のようにします。

git clone <either ssh url /http url>

上記のコマンドはすべてのブランチをチェックアウトしますが、master初期化されるのはブランチのみです。他のブランチをチェックアウトしたい場合は、次のようにします。

git checkout -t origin/future_branch (for example)

このコマンドはリモートブランチをチェックアウトし、ローカルブランチ名はリモートブランチと同じになります。

チェックアウト時にローカルブランチ名を上書きする場合:

git checkout -t -b enhancement origin/future_branch

現在、ローカルブランチ名はenhancementですが、リモートブランチ名はfuture_branchです。

ドキュメンテーション


git clone <ssh url / http url>-私にとって完璧に機能します
Kmeixner

はい。それで合っています。あなたの情報をありがとう、私はすぐにそれを更新します@warvariuc
Madhan Ayyasamy

リモートにがない場合master、これは機能しません。
polkovnikov.ph 2016

36

あなたが試すことができます

git fetch remote
git checkout --track -b local_branch_name origin/branch_name

または

git fetch
git checkout -b local_branch_name origin/branch_name

2
以前の回答で--track説明したように、デフォルトで設定されているため、FYI はgitの新しいバージョンでは不要になりました。

33

まず、次のことを行う必要があります。

git fetch #ブランチ名がわからない場合

git fetch origin branch_name

次に、次の方法でリモートブランチをローカルにチェックアウトできます。

git checkout -b branch_name origin/branch_name

-b 選択したリモートブランチから、指定した名前で新しいブランチを作成します。


-bわかりません。「git checkout master」を実行できる場合、なぜ「git checkout origin / test」を実行できないのですか?
ジョンリトル

-b(オリジン/マスターからの新しいブランチの場合)
Mohideen bin Mohammed 2018

28

次のコマンドを使用します。

git checkout --track origin/other_remote_branch

13
この答えは、このように使用する理由を説明すると、はるかに役立ちます。つまり、なぜ誰かが「--track」などを使用する必要があるのか​​...
Matt Friedman、

27

コマンド

git fetch --all
git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>

等しい

 git fetch --all

その後

 git checkout -b fixes_for_dev origin/development

どちらもlatest fixes_for_devfrom を作成しますdevelopment


24

ブランチがoriginリモート以外の場所にある場合、次のようにします。

$ git fetch
$ git checkout -b second/next upstream/next

これnextにより、upstreamリモートのブランチがと呼ばれるローカルブランチにチェックアウトされsecond/nextます。つまり、nextという名前のローカルブランチがすでにある場合は、競合しません。

$ git branch -a
* second/next
  remotes/origin/next
  remotes/upstream/next


18

これらの答えはどれもうまくいきませんでした。これはうまくいきました:

git checkout -b feature/branch remotes/origin/feature/branch


1
ありがとう。コマンドを呼び出すときに表示されたフルパス(remotes / origin / feature / branch)を使用する必要があるのか​​どうか疑問に思っていましたが、確信が持てなかったため、使用しただけで機能しているように見えました。メッセージ:gitgit branch -agit checkout -b apps/FEATURE/branch origin/apps/FEATURE/branchBranch 'apps/FEATURE/branch' set up to track remote branch 'apps/FEATURE/epicBranch' from 'origin'. Switched to a new branch 'apps/FEATURE/branch'
Chris22、2018

18

error: pathspec 'desired-branch' did not match any file(s) known to git.上記のすべての提案を見ている状況で行き詰まりました。私はgitバージョン1.8.3.1を使用しています。

だからこれは私のために働きました

git fetch origin desired-branch
git checkout -b desired-branch FETCH_HEAD

背後にある説明は、リモートブランチをフェッチするときに、それがFETCH_HEADにフェッチされたことに気付いたことです。

$ git fetch origin desired-branch
From github.com:MYTEAM/my-repo
    * branch            desired-branch -> FETCH_HEAD

17

git checkoutリモートブランチの名前で実行するだけです。Gitはリモートブランチを追跡するローカルブランチを自動的に作成します

git fetch
git checkout test

ただし、そのブランチ名が複数のリモートで見つかった場合、Gitがどちらを使用するかわからないため、これは機能しません。その場合、次のいずれかを使用できます。

git checkout --track origin/test

または

git checkout -b test origin/test

では2.19、Gitは学んだcheckout.defaultRemote、このような曖昧さを解決するときに、デフォルトのリモートを指定する構成を、。


16

git branch -rそのブランチ名がGitのローカルブランチリストにないため、オブジェクト名は無効です。ローカルブランチリストをoriginから更新します:

git remote update

そして、リモートブランチをもう一度チェックアウトしてみてください。

これでうまくいきました。

元のポスターが望んでいたものではない、すべてのリモートブランチgit fetchを引き込むと思います。


2
参考までに、git remote update すべてのリモートブランチもフェッチします

13

このgit remote show <origin name>コマンドは、すべてのブランチ(追跡されていないブランチを含む)をリストします。次に、フェッチする必要があるリモートブランチ名を見つけることができます。

例:

$ git remote show origin

次の手順を使用して、リモートブランチをフェッチします。

git fetch <origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)

例:

$ git fetch origin test:test
$ git checkout test

@hallskiは2.15.1バージョンでは機能しないと回答しましたが、.gitファイルを減らし、weigth cloneを1つだけブランチし、-depthフラグで履歴をフィルターしました。たとえば、$ git clone -b release --single-branch --depth 5 https://github.com/user/repo.gitWron't informationに$ git remote show originは、単一ブランチのクローンリポジトリを持つすべてのリモートブランチがリストされていません。
Qh0stM4N 2018年

10

リモートからフェッチしてブランチをチェックアウトします。

git fetch <remote_name> && git checkout <branch_name> 

例えば:

git fetch origin && git checkout feature / XYZ-1234-Add-alerts


9

他の男やギャルが解決策を提供しますが、多分私はあなたに理由を伝えることができます。

何もしないgit checkoutテスト

Does nothingは等しくないdoesn't workので、ターミナルで「git checkout test」と入力してEnterキーを押すと、メッセージは表示されず、エラーは発生しません。私は正しいですか?

答えが「はい」の場合、原因を説明できます。

原因は、作業ツリーに「test」という名前のファイル(またはフォルダー)があることです。

ときにgit checkout xxx解析され、

  1. Gitはxxx最初はブランチ名として検索しますが、testという名前のブランチはありません。
  2. 次に、Git xxxはパスであると考え、幸い(または残念ながら)、testという名前のファイルがあります。つまりgit checkout xxxxxxファイル内の変更を破棄することを意味します。
  3. xxxどちらの名前のファイルもない場合、Gitはxxxいくつかのルールに従ってを作成しようとします。ルールの1つは、存在するxxx場合、という名前のブランチを作成remotes/origin/xxxすることです。

おかげで、なぜgitが何もしなかった理由を理解しようとし続けました。
Mike R

8

新しく作成したブランチを取得するには

git fetch

別のブランチに切り替えるには

git checkout BranchName

6

次のBashスクリプトを使用して、すべてのリモートブランチの追跡を開始できます。

#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`
  do git branch -f --track "$branch" "origin/$branch"
done

これも単一行バージョンです。

git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;

5

git checkout -b "Branch_name" [Bはローカルブランチの作成を意味します]

gitブランチ-すべて

git checkout -b "Your Branch name"

gitブランチ

masterブランチからdevブランチへのチェックアウトに成功しました

ここに画像の説明を入力してください


git checkout -b "Branch_name" [Bはローカルブランチの作成を意味します]
Keshav Gera

3

すべてのリモートブランチを取得するには、これを使用します:

git fetch --all

次にブランチにチェックアウトします:

git checkout test

2

fetchすべてのリモコンを引くために使用します

   git fetch --all

リモートブランチを一覧表示するには:

   git branch -r

すべてのブランチをリストするには

   git branch -l
   >>outpots like-
     * develop
       test
       master

ブランチをチェックアウト/変更するには

   git checkout master

試しましたがgit branch -l、リモートブランチは表示されませんでした。
Dmitri Zaitsev

使用git pull --allまたはgit fetch --all
Nasir Khan

はい、その後も、ローカルのブランチgit branch -l のみが表示されます。それはなしとまったく同じように動作しているようですので、その理由は何ですか?git branch-l-l
Dmitri Zaitsev

また、あなたの答えは質問に答えません- masterリモートブランチではありません。
Dmitri Zaitsev

1
-lリストのフラグ。あなたも使用--listできます
Nasir Khan

2

私たちにとって、remote.origin.fetch構成に問題があるようです。したがって、我々は以外のリモートブランチを見ることができなかったmasterので、git fetch [--all]助けにはなりませんでした。それは確かに遠隔地にあったが、どちらgit checkout mybranchも機能しgit checkout -b mybranch --track origin/mybranchなかった。

以前の構成ではmasterフェッチのみが許可されていました:

$ git config --list | grep fetch
remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master

*originから新しい情報を使用してフェッチすることで修正します。

$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

$ git fetch
...
 * [new branch] ...
...

これでgit checkout、リモートブランチをローカルにできます。

この構成がローカルリポジトリでどのように終わったかはわかりません。


1
単一のブランチをクローンしたので、これで解決しました
Pontus Holmbom

2

リモートブランチ名が特殊文字で始まる場合は、checkoutコマンドでそれを一重引用符で囲む必要があります。そうしないと、gitはどのブランチについて話しているのかわかりません。

たとえば#9773、次の図に示すように、as という名前のリモートブランチをチェックアウトしようとしましたが、コマンドが正しく機能しませんでした。

ここに画像の説明を入力してください

何らかの理由でシャープ記号(#)はそれとは何かを持っていることができれば、私は疑問に思い、そして私は次のように、単一引用符でブランチ名を囲むしようとした'#9773'だけよりラーテン#9773、幸いそれは罰金を働きました。

$ git checkout -b '#9773' origin/'#9773'

多くのUNIXシェルでは、#文字はコメントに使用されるので、以降の文字は#無視されます。これはシェルのものであり、gitに固有のものではありません。の前にバックスラッシュの引用符を使用#するだけで十分です。
Paulo Scardine、2018年

1

コマンドに従って空のフォルダを作成してください。それを入力して、次のコマンドを使用します。

saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url
Cloning into 'iPhoneV1'...
remote: Counting objects: 34230, done.
remote: Compressing objects: 100% (24028/24028), done.
remote: Total 34230 (delta 22212), reused 15340 (delta 9324)
Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.
Resolving deltas: 100% (22212/22212), done.
Checking connectivity... done.
saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/
saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery
Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from origin.
Switched to a new branch '1_4_0_content_discovery'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.