Git:新しいリモートブランチが表示されない


115

同僚が新しいリモートブランチをorigin / dev / homepageにプッシュしましたが、実行するとそれが表示されません。

$ git branch -r

既存のリモートブランチがまだ表示されます。

これは、ローカルのリモート参照が最新ではないためだと思います。つまり、git pullを実行したとき、git pullは現在の作業ブランチをプルするだけなので、何も起こりませんでしたか?対応するリモートブランチに変更があるすべてのブランチをプッシュするgit pushとは異なりますか?



1
忘れるために管理しgit pull、感謝
JelenaČuklina

1
私の場合git fetch <name-of-remote>はトリックをしました。リモコンの名前がなければ、機能しませんでした。
Menno Deij-van Rijswijk

回答:


163

まず、コマンドを使用して、ブランチが実際にリモートでプッシュされていることを再確認しgit ls-remote originます。新しいブランチが出力に表示される場合は、次のコマンドを試してくださいgit fetch。リモートリポジトリからブランチ参照がダウンロードされます。

それでもリモートブランチが表示されない場合は、リモートls-remoteのブランチ名を(出力で)再確認してくださいrefs/heads/。具体的には、リモートブランチがで始まっているかどうかを確認してください。これは、デフォルトで、の値remote.<name>.fetchが次のとおりであるためです。

+refs/heads/*:refs/remotes/origin/*

名前が始まるリモート参照のみがrefs/heads/ローカルでリモート追跡参照としてローカルにマッピングされるようにしますrefs/remotes/origin/(つまり、リモート追跡ブランチになります)。


4
git fetch originを実行した後、新しいリモートブランチを確認できましたが、git fetchを実行しただけの場合の違いはわかりませんか?私はgitリモートアップデートについて読みましたが、それが何をするのか明確ではありませんでした。今後、新しいリモートブランチに対してgit fetchを実行する必要がありますか?
hybrid9 '10

1
@ hybrid9を使用する場合git fetch、gitは.git/config:で指定されているデフォルトのリモートリポジトリから参照をダウンロードします。通常はそれが呼び出されるoriginため、両方のコマンドは同等ですが、特定の構成が何らかの理由で異なる場合があります。いいえ、git fetchデフォルトではすべてのブランチをフェッチするため、すべてのブランチに与える必要はありません。
Marco Leogrande、2012年

1
@ hybrid9 git pullgit fetch+ git merge(またはgit rebaseデフォルトを変更した場合)と同等であるためgit pull、通常どおり使用し続けることができ、新しいリモートブランチが自動的にポップアップします。
マルコレオグランデ

1
私はもともとgit pullを実行していましたが、本当に混乱していた新しいリモートブランチを見たことはありません。git fetch originを実行するまでのみ。質問にお答えいただきありがとうございます。
hybrid9

2
@hybrid同じ問題があります。git ls-remote gerritrepo:project新しいリモートブランチが表示されますが、表示されgit branch -aません...別のクローンを作成する必要があります。そうすると、新しいブランチが表示されます
Vikram

78

.git/configが含まれているかどうかを確認する

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

もしそうなら、それを言うように変更してください

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

それからあなたはそれを使うことができるはずです:

$ git fetch
remote: Counting objects: …
remote: Compressing objects: ..
Unpacking objects: …
remote: …
From …
 * [new branch]            branchname -> origin/branchname
$ git checkout branchname
Branch branchname set up to track remote branch branchname from origin.
Switched to a new branch 'branchname'

12
これは、最初の浅いクローンの後で起こりました。
ArkTekniK、

パーフェクト!!! どうもありがとう!コマンドを使用してカスタムHomebrewタップをインストールすると、これが起こりました。brew tap user/repoによって複製されたリポジトリのローカルコピーには、指定しbrewた設定があり、リポジトリにある他のブランチを表示して使用することはできませんでした。再度、感謝します!:) +1!
rmbianchi

3
.git / configファイルを手動で編集する代わりに、次のコマンドを使用できます。git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"そして、originのgit fetch originすべてのブランチを取得します。
dotnetCarpenter

これはいいですね!
madz

47

最も簡単な答えは次のとおりです。

git fetch origin <branch_name>


2
これが文字通り私に有効な唯一のものでした。
セオドアR.スミス

3
私にはうまくいきません。このエラーが表示されます:fatal: Couldn't find remote ref <branch_name>
Parisa Khateri

3
はい、それは私にとってもうまくいきました、このgitのチェックアウトがうまくいった後!!
whoami

30

こうgitのリモートアップデートすることも、リモートリポジトリから入手可能ブランチのリストを更新します。

バージョン1.8.3.0以降のTortoiseGitを使用している場合は、「Git-> Sync」を実行すると、ウィンドウの左下に「リモートアップデート」ボタンが表示されます。それをクリックします。次に、「Git-> Switch / Checkout」を実行して、選択できるブランチのドロップダウンに新しいリモートブランチが表示されるようにします。


18
git remote updateこれは古い方法ですが、新しい優先コマンドはgit fetchです。

私のバージョンのTortoiseGit(2.8.0.0)では、左下のボタンの矢印の下に複数のオプションがあり、以前に選択した内容が記憶されています。これは、ボタンに「リモート更新」と表示されない場合があることを意味します。以前に使用していない場合は、「プル」と表示されます。矢印をクリックすると、オプションのリストに「リモートアップデート」が表示されます。
Michael Hinds

13

release / 1.0.5を検索しているとしましょう。

ときにgit fetch -allされて動作していないし、リモートブランチを見ることができないとgit branch -rいないこの特定のブランチを示しています。

1.リモートからのすべての参照(ブランチ、タグなど)を印刷します。

git ls-remote origin 検索しているリモートブランチが表示されます。

e51c80fc0e03abeb2379327d85ceca3ca7bc3ee5        refs/heads/fix/PROJECT-352
179b545ac9dab49f85cecb5aca0d85cec8fb152d        refs/heads/fix/PROJECT-5
e850a29846ee1ecc9561f7717205c5f2d78a992b        refs/heads/master
ab4539faa42777bf98fb8785cec654f46f858d2a        refs/heads/release/1.0.5
dee135fb65685cec287c99b9d195d92441a60c2d        refs/heads/release/1.0.4
36e385cec9b639560d1d8b093034ed16a402c855        refs/heads/release/1.0
d80c1a52012985cec2f191a660341d8b7dd91deb        refs/tags/v1.0

新しいブランチ「release / 1.0.5」が出力に表示されます。

2.リモートブランチを強制的にフェッチします。

git fetch origin <name_branch>:<name_branch>

$ git fetch origin release/1.0.5:release/1.0.5

remote: Enumerating objects: 385, done.
remote: Counting objects: 100% (313/313), done.
remote: Compressing objects: 100% (160/160), done.

Receiving objects: 100% (231/231), 21.02 KiB | 1.05 MiB/s, done.
Resolving deltas: 100% (98/98), completed with 42 local objects.
From http://git.repo:8080/projects/projectX
 * [new branch]        release/1.0.5 -> release/1.0.5

これでローカルにも参照があり、このブランチをチェックアウト(または何でも)します。

仕事完了!


1
あなたは命の恩人です:)
Chakri

#2は私が探していたものでした。ありがとう!
マシュー

4

些細なことのように聞こえますが、私の問題は、私が適切なプロジェクトに参加していなかったことです。参加する予定のプロジェクトに参加していることを確認してください。そうしないと、正しいブランチをプルダウンできなくなります。


おっと!いいね!
マルク・

2

私はブルートフォースを使用してリモートを削除してから追加しました

git remote rm <remote>
git remote add <url or ssh>

1

最終的に私にとってうまくいったのは、次のように、リモートリポジトリ名をgit fetchコマンドに追加することでした。

git fetch core

今、あなたはこのようにそれらのすべてを見ることができます:

git branch --all

0

リモートブランチをチェックアウトできます/ n git fetch && git checkout remotebranch

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