質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.70%

`git fetch <repository> <branch>`しても、リモート追跡ブランチに反映されない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 231

miya_bunta

score 5

あるlocal作業環境で、リモートブランチのcommitが進んでいる状態でgit fetch origin developしたところ、下記のように"FETCH_HEAD"だけが更新され、リモート追跡ブランチ"origin/develop"に反映されませんでした。

From bitbucket.org:xxxxxxx/xxxxxxx
 * branch          develop    -> FETCH_HEAD


私が期待していたのは下記のような結果です。(引数なしでgit fechした場合は問題なくリモート追跡ブランチに反映されました。)

From bitbucket.org:xxxxxxx/xxxxxxx
 * branch          develop    -> FETCH_HEAD
   xxxxxx..xxxxxxx develop    -> origin/develop


git fetch <repository> <branch>した時にリモート追跡ブランチにも反映されないのは何故でしょうか?

調べたこと

git fetch origin developgit fetch origin develop:と同じであり、引数として"<dst>"が明示されていない場合、"remote.origin.fetch"の値の"<dst>"が設定されるという認識でおります。

".git/config"を確認すると下記のようになっており、参照が間違っているようにも見えません。

[remote "origin"]
    url = git@bitbucket.org:xxxxxxx/xxxxxxx
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "develop"]
    remote = origin
    merge = refs/heads/develop

補足

git version 1.8.3.1 (バージョンが古いのが気になります...)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yoorwm

    2019/07/26 17:12

    日本語がおかしいか、理解が間違っている気がします。
    > 引数なしでgit fechした場合は問題なくリモート追跡ブランチに反映されました。
    fetchはリモートに作用しませんよ?

    キャンセル

  • miya_bunta

    2019/07/26 18:12

    ご指摘ありがとうございます。
    > fetchはリモートに作用しませんよ?
    念の為確認させていただきたいのですが、リモートとは「リモートブランチ」ではなく「リモート追跡ブランチ」を指してらっしゃるのですよね?
    `fetch`を行うとリモートブランチの最新状態を取得し、ローカル上のリモート追跡ブランチが更新されると理解しておりましたが違うのですね。ふむふむ...ちょっと勉強し直します。

    キャンセル

  • tamoto

    2019/07/26 19:42

    「リモート追跡ブランチ」はリモートの情報をマッピングしているだけのローカルに保持している ref のことなので間違っていませんよ。

    キャンセル

回答 1

checkベストアンサー

+1

こんにちは。

その .git/config の fetch の値が、git fetch で引数を省略した場合のデフォルト値です。
つまり、こう書かなければなりません。

git fetch origin refs/heads/branch:refs/remotes/origin/branch

: の右側がマッピング対象のリモート追跡ブランチです。


20190731 追記

全面的に回答を修正します。
Windows Sandbox 上で Git v1.8.3 をインストールし同様の操作を試してみたところ、質問の問題が再現することが分かりました。
現在の Git (v2.22.0-1 にて確認)では、refspec を部分的に省略した場合でもその箇所が .git/config に指定したデフォルト値にフォールバックされるようで、どちらの書き方であっても自動的に remote ref が更新されるようになっているようです。
これが仕様変更なのか、バグ修正なのか、どのタイミングでどのように変更が反映されたのか、については未だ検証できていませんが、少なくともこれがクライアントバージョンの差分によるものであることは確認がとれました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/27 02:10

    なるほど、別環境で`git fetch origin develop`したときにリモート追跡ブランチも更新されたような記憶がありましたのでそのように考えておりましたが記憶違いだったようです。。。
    ありがとうございます!

    キャンセル

  • 2019/07/27 02:45 編集

    ↑で言っていた別環境(リポジトリも別物)で同様にリモートブランチのcommitが先行した状態で`git fetch origin develop`したところ
    ```
    From bitbucket.org:xxxxxxxx/xxxxxxxxx
    * branch develop -> FETCH_HEAD
    xxxxxxx..xxxxxxx develop -> origin/develop
    ```
    となり、developブランチがorigin/developよりもbehindな状態になりました。
    これはどう理解したら良いでしょう...

    キャンセル

  • 2019/07/27 14:13

    空のリポジトリを作って試してみたところ、確かにその通りの挙動となることが確認できました。
    記憶と異なっているので、ちょっと詳細に検証してみます。
    本回答は誤りである可能性があります。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.70%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる