マージするブランチを指定せずにプルするように頼まれました


125

TL; DR:プルできない「追跡」ブランチがあります。

だからここに私は「バケット4」にいます:

$ git branch -v
  bucket-1       410f7b5 * gh-53 * gh-48 * "Share App"
  bucket-2       7ed70a2 * upgrade to SOLR 3.3.0
  bucket-3       400ffe4 * emergency fix prod issue
* bucket-4       64c2414 Merge branch 'bucket-3' into bucket-4
  master         8dc4854 [ahead 1] * gh-73

リモコンから変更を取得したい:

$ git pull

You asked me to pull without telling me which branch you
want to merge with, and 'branch.bucket-4.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:

    [branch "bucket-4"]
    remote = <nickname>
    merge = <remote-ref>

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.

うーん、奇妙なことに、私はすでに「bucket-4」を追跡ブランチとして追加したと思いました。どれどれ:

$ git remote show origin
* remote origin
  Fetch URL: git@github.com:abcd/main.git
  Push  URL: git@github.com:abcd/main.git
  HEAD branch (remote HEAD is ambiguous, may be one of the following):
    bucket-3
    master
  Remote branches:
    bucket-1       tracked
    bucket-2       tracked
    bucket-3       tracked
    bucket-4       tracked
    master         tracked
  Local branches configured for 'git pull':
    bucket-1       merges with remote bucket-1
    bucket-2       merges with remote bucket-2
    bucket-3       merges with remote bucket-3
    master         merges with remote master
  Local refs configured for 'git push':
    bucket-1       pushes to bucket-1       (up to date)
    bucket-2       pushes to bucket-2       (up to date)
    bucket-3       pushes to bucket-3       (up to date)
    bucket-4       pushes to bucket-4       (local out of date)
    master         pushes to master         (fast-forwardable)

実際、バケット4は「追跡済み」としてマークされていますが、何らかの形でプッシュ用に構成されていますが、プル用には構成されていません。

私の.git/configファイルを見ると、ほとんどのブランチに「リモート」および「マージ」エントリがありますが、バケット4にはないことがわかります。これなしで「追跡」されたとどのように考えられますか?

[remote "origin"]
    url = git@github.com:abcd/main.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "rel-2011-07-07"]
    remote = origin
    merge = refs/heads/rel-2011-07-07
[branch "bucket-1"]
    remote = origin
    merge = refs/heads/bucket-1
[branch "bucket-2"]
    remote = origin
    merge = refs/heads/bucket-2
[branch]
    autosetupmerge = true
[branch "bucket-3"]
    remote = origin
    merge = refs/heads/bucket-3

ここで考えられる解決策はremote/merge、私の構成ファイルにbucket-4のエントリを追加することです。しかし、これなしではどのように「追跡」されていると考えられますか?バケット4はローカルで作成され、このリポジトリからサーバーにプッシュされたため、このブランチのトラッキングを適切に設定しなかったのではないかと思います。

今後、すべてのローカルブランチがリモートを適切に追跡できるようにするために追加できる構成はありますか?


2
この質問は私を正しい方向に向けました、私が引っ張ろうとしたブランチのエントリを私の.git / configファイルに追加する必要があり、それはうまくいきました。
バングル氏2012

うん私も、とマークLongairはgitのブランチ--set-上流バケット-4の原点/バケット-4で後述のようにそれを行う方法がある
ジョナサンHorsman

回答:


191

これはbucket-4 pushes to bucket-4、ブランチをプッシュするときのデフォルトが、リモートで一致する名前を持つブランチにプッシュすることだからです。(ローカルブランチがリモート追跡ブランチを追跡していて、リモート追跡ブランチがリモートリポジトリ内の別の名前のブランチに対応している場合でも、これはまだデフォルトです。)

あなたの間の関連付け設定する最も簡単な方法bucket-4bucket-4では、originあなたが押す次回は、あなたが行うことを確認することです:

git push -u origin bucket-4

または、次のようにすることもできます。

git branch --set-upstream-to origin/bucket-4

いくつかの質問に直接回答するには:

これなしで「追跡」されたとどのように考えられますか?

この場合はそうではありません-git configにないbranch.bucket-4.mergebranch.bucket-4.remote、git configにない場合、リモート追跡ブランチを追跡しません。からの出力git remote show originは、デフォルトでブランチがプッシュされる場所を示しています。

今後、すべてのローカルブランチがリモートを適切に追跡できるようにするために追加できる構成はありますか?

あるとは思いません。あなたがbucket-4ローカルで作成したとき、私が起こったと思いますが、リモート追跡ブランチは存在しなかったため、その時点でセットアップすることはできません-デフォルトの動作を非常に混乱させるでしょう。-u最初git pushのブランチをアップストリームリポジトリに追加することを忘れないでください。

それがお役に立てば幸いです。


7
git branch --set-upstreamプルを行う前に、私にとっては完璧に機能しました
12

git branch --set-upstream bucket-4 origin / bucket-4は私のために働きました:-)
Aliza

プッシュしたくない場合はどうなりますか?私はこれと同じ問題を抱えていますが、この問題が発生するリポジトリからプッシュしたくありません。リモートオリジンを切り替えたところ、リモートオリジンを切り替える前に追跡されていたとしても、もはや追跡されていないように見えるブランチの最新のHEADをプルダウンしたいと思います。最後に、問題のあるクローンを削除し、新しいオリジンから再クローンしました。
ジオイデシック2015

1
実際にgit --set-upstream <branch> origin/<branch>は、フラグが廃止されているため、エラーが発生します。使用することをお奨めされgit branch --track origin/<branch>たり--set-upstream-to二答えが示唆したように。答えは更新できると思います、@ MarkLongair?
AymDev 2018

提案をありがとう、@ AymDev-私はその変更を行いました。
マークロングエア2018

6

git branch --set-upstream <branch> origin/<branch> 少なくとも1.8.2.3(私のバージョン)で非推奨になりました。

git branch --set-upstream-to=origin/<branch> <branch>代わりに使用してください。


2
これがマークの答えに対するコメントであるということですか?また、Gitバージョン1.8.0では実際には非推奨になりました。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.