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

2009年11月23日に質問されました。  ·  閲覧回数 5.5M回  ·  ソース

Juri Glass picture
2009年11月23日

誰かがtestというブランチをgit push origin testとともに共有リポジトリにプッシュしました。 git branch -rブランチを見ることができます。

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

私はもう試した:

  • 何もしないgit checkout test

  • git checkout origin/test* (no branch)を与えます。 これは紛らわしいです。 どうすれば「ブランチなし」になれますか?

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

回答

hallski picture
2009年11月23日
9544

1つのリモコンで

ヤクブの答えは実際にこれを改善します。 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

1つ以上のリモコンを使用

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

ブランチをフェッチするには、次のことを行うだけです。

git fetch origin

これにより、すべてのリモートブランチがフェッチされます。 チェックアウトに利用できるブランチは、次のコマンドで確認できます。

git branch -v -a

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

git checkout -b test origin/test
Jakub Narębski picture
2009年11月24日
1302

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

git checkout test

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


git branch出力の* (no branch)は、名前のないブランチ、いわゆる「切り離されたHEAD」状態にあることを意味します(HEADは直接コミットを指し、一部のローカルブランチへのシンボリック参照ではありません)。 この名前のないブランチでいくつかのコミットを行った場合は、現在のコミットからいつでもローカルブランチを作成できます。

git checkout -b test HEAD

**編集(著者ではなく編集者による)**

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

@Dennis: git checkout <non-branch> 、たとえばgit checkout origin/testは分離されたHEAD /名前のないブランチになり、 git checkout testまたはgit checkout -b test origin/testはローカルブランチtestアップストリームとしてリモート追跡ブランチorigin/testを使用)–JakubNarębski 2014年1月9日8:17

git checkout origin/test重点を置く

ndim picture
2009年11月23日
580

この場合、リモートのtestブランチを追跡するローカルのtestブランチを作成することをお勧めします。

$ git branch test origin/test

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

Corey Ballou picture
2012年12月08日
484

受け入れられた答えはあなたのために働いていませんか?

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

$ git checkout -b remote_branch origin/remote_branch

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

解決

このメッセージを受け取った場合は、 git checkout remote_branchを実行する前に、まずgit fetch origin実行する必要があります。ここでoriginはリモートリポジトリの名前です。 応答のある完全な例を次に示します。

$ 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'

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

Sahil kalra picture
2013年10月18日
275

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

git fetch origin 'remote_branch':'local_branch_name'

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

tacaswell picture
2012年04月28日
111

これにより、originという名前のないリモートのDWIMます

$ git checkout -t remote_name/remote_branch

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

$ git remote add remote_name location_of_remote
$ git fetch remote_name

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

matanster picture
2016年02月21日
107

使用する:

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

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

Alireza picture
2017年09月05日
91

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

ブランチをfetchする必要があります...

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

git fetch && git checkout test

また、違いを共有し、 fetchどのように機能するか、またpullとどのように異なるかを確認するために、以下の画像を作成しました。

git fetch

Madhan Ayyasamy picture
2013年01月21日
59

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ます。

uma picture
2014年03月24日
40

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

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

または

git fetch
git checkout -b local_branch_name origin/branch_name