gitのフェッチですべてのブランチが取得されない


201

リポジトリのクローンを作成した後、他の誰かが新しいブランチを作成しました。マニュアルを読んだのですが、とても簡単なようです。不思議なことにそれは機能しておらず、私が見つけたすべての投稿は私が正しいことをしていることを示唆しています。したがって、明らかにこれに何か問題があるに違いないので、私はランバスをします。

正しいアクションは思わします

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml

この時点で問題が発生しています。何らかの理由でgit fetch、dev-gmlリモートブランチが表示されなくなった後です。何故なの?リポジトリを新しくクローンすると、そこにあるので、確かにリモートブランチが存在します。

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev-gml
  remotes/origin/master

私が試したgit updategit pullgit fetch --allgit pretty-pleaseすべての可能な順列に...


44
何をgit config --get remote.origin.fetch生産していますか?そうでない場合は+refs/heads/*:refs/remotes/origin/*、おそらくそうなります。
torek

それが生成まさにだうん
エドワード・ニューウェル

3
まったく同じ問題ですが、上のコメントで解決しました!私が持っていた+refs/heads/master:refs/remotes/origin/mastermasterの代わりに、*
ミルコ

1
私にとっても同じ問題ですが、このページのどの提案もそれを解決しません。変だ。
マグナス

1
@ thoni56:はい、これはおそらく浅いクローンが原因です。
TRANベトナムホアン

回答:


384

remote.origin.fetch設定を確認すると問題が見られます
(で始まる$行は、入力したコマンドを含むbashプロンプトです。他の行は結果の出力です)。

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

ご覧のとおり、私の場合、リモートはマスターブランチを具体的かつ唯一フェッチするように設定されていました。結果を確認する2番目のコマンドを含め、以下のように修正しました。

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

ワイルドカード*はもちろん、そのパスの下のすべてを意味します。

残念ながら、私はすでに掘り下げて試行錯誤して答えを見つけた後で、このコメントを見ました。


2
これは、元の投稿の問題を実際に解決したため、おそらく受け入れられる答えになるはずです。
LocalPCGuy

1
--replace-allremote.origin.fetch
余談

4
これは、リポジトリを単一のブランチのみで複製した場合に発生する可能性があることに注意してください。たとえば、git clone <url> --branch <branch> --single-branch [<folder>]
Narretz

2
stuxの回答をチェック
Newbee

5
これは、クローンを作成したときに発生する可能性がありますgit clone ... --depth 1
Anatolii Bivol

107

今日はレポでこの問題がありました。

それは+refs/heads/*:refs/remotes/origin/*トップソリューションによる問題ではありませんでした。

フェッチするリモートブランチがありましたが、単にそれであるgit fetch origingit fetch、何もしないように見えました。

多くのことを試した後、元のリモートを削除し、再作成しました。それはそれを修正したようです。理由がわからない。

以下で削除: git remote rm origin

そして再作成: git remote add origin <git uri>


14
remote.origin.fetchieの正しいgit構成がありました+refs/heads/*:refs/remotes/origin/*。上記の解決策は私を助けました。
ニュービー

9
この解決策は私にとっても正しい解決策でした。これは、Gitに潜在的にバグがあることを示しているため、残念です。
Robert Oschler

2
これも私の問題を解決しました。私はgitバージョン2.19.1vのマシンでもこの問題が発生するようですが、gitバージョン2.17.1の別のマシンでは発生しませんでした
jerpint

6
git remote update origin私のために働いた。何かリフレッシュが必要だと思いますか?
フェリペジェラール

2
git remote update origin私にはうまくいきませんでしたが、リモコンの取り外しと追加はうまくいきました。
Anatoliy Kmetyuk

58

リモート更新

あなたは走る必要があります

git remote update

または

git remote update <remote> 

次に、実行git branch -rしてリモートブランチを一覧表示できます。

新しいブランチをチェックアウトする

(新しい)リモートブランチをローカルブランチとして追跡するには:

git checkout -b <local branch> <remote>/<remote branch>

または(余分なものがないと機能しない場合がありますremotes/):

git checkout -b <local branch> remotes/<remote>/<remote branch>

役立つGitチートシート


5
しかし、私の問題は、既存のリモートブランチをチェックアウトできないことです。これは、私のgitクライアントがそれが存在するとは考えていないためです。私の質問を参照してください。実行git fetchするgit branch -aと、すべてのブランチが表示されないことに注意してください。dev-gml共同作業者が作成したブランチを表示するには、作業ディレクトリを削除して再クローンする必要がありました。今回はうまくいきましたが、頻繁に分岐します!
エドワードニューウェル2012

@EdwardNewellさん、回答をありがとうございます。通知のために、リンクcheat.errtheblog.com/s/gitは私にとって死んでいます...
Kjellski

私が最初にこの質問をしたのは久しぶりです、そして誰かが新しく投稿したので私はpingされました。元々何も私のために働いていなかったとしても、私はこの答えを受け入れています。私が最終的にこれを正しいとマークしたのは、彼がEdit:よく書いたものはうまく機能したのではないかと私が思うからです。それでも問題が解決しない場合に試してみたいことです。HTH
エドワードニューウェル

記録のために、ここで私を助けたビットはgit remote update originです。これにより、欠落したブランチがを介して表示されるようになりましたgit branch -l -r。(私は見ましたがgit config --get remote.origin.fetch、出力は+refs/heads/*:refs/remotes/origin/*予想通りでした。)
Robert Dodier

9

端末から書きます

git fetch --prune.

それは正常に動作します。


1
ありがとうございました!私は多くのことを試してみて、これを試してみる
つもり

それは何をするためのものか?
Adam Orlov

それはすべての利用可能なブランチを取ります。頭を見てください。
サメットÖZTOPRAK2018年

4

より具体的にするには、追跡ブランチを作成します。これは、リモートブランチを追跡していることを意味します。

git branch --track branch remote-branch
git branch --track exp remotes/origin/experimental

その後、あなたはできる

git branch   # to see the remote tracking branch "exp" created .

次に、そのブランチで作業するには

git checkout branchname
git checkout exp

ブランチに変更を加えた後。以下のように、git fetchおよびgit mergeをリモートトラッキングブランチとマージして、変更をマージし、リモートブランチにプッシュできます。

git fetch origin
git merge origin/experimental  
git push origin/experimental

これがどのように機能するのか、そしてあなたにアイデアを与えることを願っています。


1

同様の問題がありましたが、私の場合、リモートブランチにプル/プッシュできましたが、リモートブランチgit statusに対してローカルブランチの状態を表示しませんでした。

また、私の場合git config --get remote.origin.fetchは何も返されませんでした

問題は.git/config、各リモートブロックのフェッチ行のファイルにタイプミスがあったことです。おそらく以前に誤って追加したもの(このファイルを直接見たり、編集したりすることもあります)

したがって、.git/configファイルのリモートエントリが正しいかどうかを確認してください。例:

[remote "origin"]
    url = https://[server]/[user or organization]/[repo].git
    fetch = +refs/heads/*:refs/remotes/origin/*

0

これは、顔の手のひらの瞬間が原因である可能性があります。複数のクローンを切り替えると、存在しないブランチをプルしようとして、間違ったソースツリーにいることが簡単にわかります。クローンの名前が似ている場合、またはリポジトリが複数のコントリビューターのそれぞれからの同じプロジェクトの別個のクローンである場合は、より簡単です。新しいgitクローンは、実際の問題がフォーカスまたは作業コンテキスト、あるいはその両方を失ったときに、明らかにその「問題」を解決するようです。


0

ここでは何も機能していないように見えるので、GitExtensionsリモートリポジトリに移動する必要がありました。そこで、2つのブランチにリモートリポジトリが設定されていないことがわかりました。調整後は次のようになりますここに画像の説明を入力してください

ブランチがnoExternal3まだリモートリポジトリがないと表示されていることに注意してください。どのbashコマンドの組み合わせがそれを発見または調整したかはわかりません。


0

今日も同じ問題を抱えていましたが、最初からリポジトリをセットアップしていました。私はすべてを試しましたが、原点を削除して再度追加する以外は何もうまくいきませんでした。

git remote rm origin
git remote add origin git@github.com:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched

-1

同じ問題が発生したため、使用する必要があります

git fetch

git push origin branch_name

git branch -r

これが同じ問題に直面している誰かを助けることを願っています

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