web-dev-qa-db-ja.com

git fetchはすべてのブランチをフェッチしません

リポジトリのクローンを作成した後、誰かが新しいブランチを作成したので、作業を開始します。私はマニュアルを読んで、それは完全に簡単に思えます。奇妙なことに、それは機能しておらず、私が見つけたすべての投稿は、私が正しいことをしていることを示唆しています。 mustこれには明らかに問題があるので、私は暴行を受けます。

正しいアクションseems

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を試しました...

149
Edward Newell

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/*

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

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

285
AndASM

本日、レポでこの問題が発生しました。

最上位のソリューションによる+refs/heads/*:refs/remotes/Origin/*の問題ではありませんでした。

症状は、フェッチするリモートブランチがあったにもかかわらず、git fetch Originまたはgit fetchが何もしないように見えることでした。

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

削除:git remote rm Origin

git remote add Origin <git uri>で再作成します

50
stux

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

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

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

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

編集:git remote updateまたはgit remote update <remote>を実行する必要があります。次に、git branch -rを実行して、リモートブランチを一覧表示できます。

役立つgitチートシート

45
philipvr

より具体的にするには、追跡ブランチを作成します。つまり、現在はリモートブランチを追跡しています。

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

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

4
Swapna

端末から書きます

git fetch --Prune.

正常に動作します。

2
Samet ÖZTOPRAK

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

0
jerseyboy

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

git fetch

git Push Origin branch_name

git branch -r

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

0
chazefate

ここでは何も機能していないように思えたため、GitExtensionsリモートリポジトリに移動する必要がありました。そこで、2つのブランチにリモートリポジトリが構成されていないことがわかりました。調整後は次のようになりますenter image description here

ブランチnoExternal3には、まだリモートリポジトリがないことが示されています。どのbashコマンドのコンボがそれを見つけたり調整したりするのかわからない。

0
Maslow