1. ホーム
  2. git

[解決済み] どのブランチとマージしたいかを言わずにpullするように言われました。

2022-07-18 07:30:08

質問

TL;DR: "tracked" ブランチがありますが、プルすることができません。

というわけで、私は今、バケツ 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: [email protected]:abcd/main.git
  Push  URL: [email protected]: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)

確かに、bucket-4 は "tracked" としてマークされていますが、なぜか push 用に設定されており、pull 用には設定されていないようです。

私の .git/config ファイルを見ると、ほとんどのブランチで "remote" と "merge" の項目がありますが、bucket-4 にはありません。これなしで、どのように "tracked" と見なされるのでしょうか?

[remote "origin"]
    url = [email protected]: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 pushes to bucket-4 と書かれているのは、ブランチをプッシュするときのデフォルトが、リモートの一致する名前のブランチにプッシュすることだからです。 (これはまだデフォルトであることに注意しましょう。 であっても がリモート追跡ブランチを追跡していて、リモート追跡ブランチがリモートリポジトリの別の名前のブランチに対応している場合でも、これはデフォルトであることに注意してください)。

の間の関連付けを設定する最も簡単な方法は、"get" をクリックすることです。 bucket-4bucket-4origin は、次に押すときに確認することです。

git push -u origin bucket-4

あるいは、こうすることもできます。

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


いくつかの質問に直接お答えします。

<ブロッククオート

これがないと、どのように"tracked"と見なされるのでしょうか?

この場合、リモート追跡ブランチを追跡しているとは言えません。 branch.bucket-4.merge または branch.bucket-4.remote を git の設定に追加します。 からの出力は git remote show origin の出力は、デフォルトでプッシュされるブランチの場所を示しているだけです。

将来的にすべてのローカルブランチがリモートを適切に追跡するために追加できる設定はありますか?

それはないと思います。 あなたが bucket-4 をローカルに作成したときには、リモート追跡ブランチは存在しなかったので、その時点で設定することはできません。 この場合、デフォルトの挙動が非常にわかりにくくなります。 -u を最初の git push をそのブランチの上流レポジトリに追加します。

少しでも参考になれば幸いです。