リモートGitリポジトリのブランチを1つだけフェッチするにはどうすればよいですか?


246

リモートリポジトリの1つ(すべてではない)のブランチを取得し、そのリモートブランチへの更なる更新を追跡できるローカルトラッキングブランチを作成したいと思います。リモートリポジトリの他のブランチは非常に大きいため、フェッチしないようにしたいと思います。どうすればよいですか?

編集:私はこれを自分で見つけましたが、StackOverflowは答えを答えとして提供することを拒否しているので、代わりにここに質問に入れます。

-tオプションを使用してgit remote addを実行します。例:

git remote add -t remote-branch remote-name remote-url

複数の " -t branch"オプションを使用して、複数のブランチを取得できます。


3
git cloneは、すべてのブランチを含むリポジトリ全体をフェッチします。浅いコピーを作成することもできますが、これではリビジョンの数を指定できるだけで、どのブランチを指定するかは指定できません。
Ikke

確かにあなたはあなた自身の質問に答えることができます、なぜあなたはできないのですか?
CharlesB 2011年

2
OPが彼にそれを答えることができなかったことを意味したと私は思う。StackOverflowは、独自の質問に回答できるようになるまでの最小時間を設定します。
Lars Nordin

1
OPさん、こんにちは。今すぐ回答を追加してください。このようにして、投票できます(他の回答と比較できます)
lulalala

3
あなたのgit remote addコマンドはリモートブランチを追加していますが、これはブランチのフェッチとは何の関係もありません!
Chris Halcrow、2015年

回答:


220
git fetch <remote_name> <branch_name>

私のために働いた。


13
フェッチしたブランチがFETCH_HEADフェッチ後と同じように使用できることを確認しました。ありがとう!
クリストフ

4
その後git checkout FETCH_HEAD、チェックアウト
d9k

シンプルで簡単。
gsumk

<remote_name>を取得する方法は?
mrgloom

ほとんどの場合、@ mrgloom remote_nameoriginです。例:git fetch origin <branch_name>
Saahithyan Vigneswaran

67

1つの方法は次のとおりです。

git fetch <remotename> <remote branch>:refs/remotes/<remotename>/<local branch>

ただし、追跡は設定されません。

詳細については、git fetchのドキュメントを参照してください。

編集:@ user1338062の以下の注記のように、新しいブランチを追加するリポジトリのローカルクローンがまだないが、新しいローカルリポジトリを作成する場合、git clone --branch <branch_name> --single-branch <repo_url>はより短いソリューションを提供します。


1
おかげでこれはオペレーションが要求したことを行います。追跡ブランチを作成するにはgit checkout -t <リモートブランチ> / <ブランチ名> <ブランチ名>
ken

7
単純にとするとgit checkout <branchname>、その名前のブランチがリモートブランチのみの場合、gitが自動的にトラッキングブランチをセットアップすることがわかります。
bukzor 2013

1
これは私のために働いた唯一のものでした。構成が単一のブランチの参照をフェッチするように設定されていても、フェッチまたはプルを使用してすべてのブランチに参照をプルしました。このコマンドは、必要なブランチのみをプルしたため、リポジトリは5kbではなく500kbしかありませんでした。ありがとう。
herostwist 2013年

1
この答えはおそらく時代遅れです。とオプションがgit cloneサポートされるようになりましたデモ付きで回答を投稿しまし--branch--single-branch
user1338062 2015年

3
@ user1338062これは、クローン後に新しいブランチのみ(git fetchを使用してすべてのブランチではなく)をフェッチする場合にも有効です
rubyprince

35

私はすでに多くの答えがあることを知っていますが、これらは私のために働いたステップです:

  1. git fetch <remote_name> <branch_name>
  2. git branch <branch_name> FETCH_HEAD
  3. git checkout <branch_name>

これらは、@ Abdulsattar Mohammedによる回答、その回答に対する@Christophによるコメント、およびその他のスタックオーバーフローの質問とその回答に基づいています。


1
ここで最も有用な答えはIMO
Daniel Holmes

31

既存のリモートを更新して特定のブランチのみを追跡するには、以下を使用します。

git remote set-branches <remote-name> <branch-name>

からgit help remote

set-branches
    Changes the list of branches tracked by the named remote. This can be used to track a subset of the available remote branches
    after the initial setup for a remote.

    The named branches will be interpreted as if specified with the -t option on the git remote add command line.

    With --add, instead of replacing the list of currently tracked branches, adds to that list.

1
驚くべきことに、私は--single-branchリポジトリにいて、後で追加のブランチをダウンロードできませんでした。ありがとう!
Yajo

22

それを行う1つの方法:

.git / configでは、リモートリポジトリのフェッチは、任意のブランチをフェッチするように設定する必要があります。

   [remote "origin"]
            fetch = +refs/heads/*:refs/remotes/origin/*

リモートブランチを取得するには:

git fetch origin branch-name

オリジンからリモートブランチ「branch-name」を追跡するように設定されたローカルブランチ「branch-name」を作成します。

git checkout -b branch-name origin/branch-name

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

git branch -a

16

著者の投稿からコピー:

-tオプションを使用してgit remote add、例えば:

git remote add -t remote-branch remote-name remote-url

複数の-t branchオプションを使用して、複数のブランチを取得できます。


10
反対投票、なぜ同じスレッドの既存の回答で答えるのですか?
ボーエン

13

「git pull」と「git fetch」のデフォルトを変更して特定のブランチのみをフェッチする場合は、.git / configを編集して、リモート構成が次のようになるようにします。

[remote "origin"]
  fetch = +refs/heads/master:refs/remotes/origin/master

デフォルトでは、これはoriginからのみマスターをフェッチします。詳細については、https//git-scm.com/book/en/v2/Git-Internals-The-Refspecを参照してください。

編集:これは、これがgit remote addの-tオプションと同じことであることに気づきました。少なくともこれは、リモートを削除せずに-tを使用して再度追加したくない場合に、リモートが追加された後にそれを行うには良い方法です。


1
progit.org/book/ch9-5リンクはgit-scm.com/book/en/Git-Internals-The-Refspecに移動しました
ここ

8

完全を期すために、ここでは新しいチェックアウトのコマンド例を示します。

git clone --branch gh-pages --single-branch git://github.com/user/repo

他の回答で述べたremote.origin.fetchように、それはこのように設定されます:

[remote "origin"]
        url = git://github.com/user/repo
        fetch = +refs/heads/gh-pages:refs/remotes/origin/gh-pages

5

gitバージョン:2.74

これが私のやり方です:

git remote add [REMOTE-NAME] [REMOTE-URL]
git fetch [REMOTE-NAME] -- [BRANCH]

4

gitバージョン2.16.1.windows.4

git fetchを 実行するだけで、remoteRepositoryName branchName(eg: git fetch origin my_local_branch)で十分です。フェッチが実行され、新しいローカルブランチが同じ名前で作成され、トラッキングがリモートブランチに設定されます。

次に、git checkout branchNameを実行します。


git branchチェックアウトするまでブランチは表示されません
commonpike

3

私の回避策:

git fetch --depth=1
git checkout <branch_name>

ローカルクローンがない場合:

git clone --depth 1 -b <branch_name> <repo_url>

3
  1. 選んで任意の<remote_name>あなたが使用したいと思います(使用して自由に感じるorigin と手順をスキップ1)
  2. git remote add <remote_name> <remote_url>
  3. git fetch <remote_name> <branch>
  4. <your_local_branch_name>使用するものを選択してください。と同じである可能性があり<branch>ます。
  5. git checkout <remote_name>/<branch> -b <your_local_branch_name>

お役に立てば幸いです。


1

答えは実際には、現在の追跡ブランチのリストに依存します。特定のブランチをリモートからフェッチできるのは、そのブランチがすでに追跡ブランチリストにあるgit fetch <remote_name> <branch_name> 場合のみです(次のコマンドで確認できます)。git branch -r)。

以前に--single-branchオプションを使用してリモートのクローンを作成したとします。この場合、私が持っている唯一の追跡ブランチは「クローンされた」ブランチです。git remote add <remote_name> <remote_url>コマンドを入力するだけでなく、git configを手動で微調整するようにアドバイスすることに少し戸惑っています。「git remote add」は新しいリモートをセットアップするため、既存のリモートリポジトリでは動作しません。「-tブランチ」オプションを指定しても役に立たなかった。

リモートが存在し、フェッチしたいブランチがそのリモートに存在する場合:

  1. git branch -rこのブランチがトラッキングブランチとして表示されるかどうかを確認します。そうでない場合(私の場合、単一ブランチクローンの場合のように)、このブランチを--addオプションを使用して「git remote set-branches」で追跡ブランチリストに追加します。

    • git remote set-branches --add <remote_name> <branch_name>
  2. これで、特定のブランチをフェッチできます(ここで他の回答を複製してください):

    • git fetch <remote_name> <branch_name>
  3. そして、「checkout --track」で新しいローカルブランチを作成してチェックアウトします。これには、トラッキングブランチと同じ「branch_name」が付与されます。

    • git checkout --track <remote_name>/<branch_name>

0

それを行う最も簡単な方法

  git fetch origin <branch> && git checkout <branch>

例:uatブランチをoriginからフェッチし、これを現在の作業ブランチとして切り替えたい。

   git fetch origin uat && git checkout uat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.