LoginSignup
6
3

More than 1 year has passed since last update.

【Git】ローカルにないリモートブランチを、ローカルに反映したい

Last updated at Posted at 2021-05-21

ローカルにないリモートブランチを、ローカルに反映したい

基本はこれでできるはず

例えばこんな状況で、main をローカルに持ってきたいとき

(branch -a オプションは、ローカルとリモートに存在するブランチを表示してくれます)
$ git branch -a
* develop
  remotes/origin/HEAD -> origin/develop
  remotes/origin/main

そんなときは、git checkout -b [branch_name] origin/[branch_name]で解決します

$ git checkout -b main origin/main
Branch 'main' set up to track remote branch 'main' from 'origin'.
Switched to a new branch 'main'

$ git branch 
* main
  develop

ちなみに[branch_name]をtypoするとただエラーになるだけで、間違った名前でブランチが作られることはありません

ここからは、この通りに行かない場合についての対処法です

【問題1】git branch -a に、あるはずのリモートブランチがない!

リモートのgit(githubやgitlabなど)には、main ブランチが存在しているのに
git branch -a で表示されないことがあります。

$ git branch -a
* develop
  remotes/origin/HEAD -> origin/develop

そんなときは、ブランチではなくorigin のみをfetchすると
現在のブランチなどのoriginの状況が反映されます。

$ git fetch origin
* develop
remote: Enumerating objects: 463, done.
remote: Counting objects: 100% (463/463), done.
remote: Compressing objects: 100% (156/156), done.
remote: Total 463 (delta 311), reused 431 (delta 293), pack-reused 0
Receiving objects: 100% (463/463), 103.55 KiB | 623.00 KiB/s, done.
Resolving deltas: 100% (311/311), completed with 37 local objects.
From github-hoge:hoge/hoge-branch
 * [new branch]      main     -> main

しかし、これをしてもブランチが反映されないことがあります。

【問題2】git fetch origin したのにブランチが反映されない!

そんなときは、.git の設定ファイルがおかしい可能性があります

.git/configを開くとこんな感じになっていませんか⁇

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@github-hoge:hoge/hoge-branch.git
    fetch = +refs/heads/*:refs/remotes/origin/develop
[branch "develop"]
    remote = origin
    merge = refs/heads/develop

このfetch部分が、develop 以下になっているのが問題です

ワイルドカードに変更してあげれば、fetch originでorigin配下を反映できるようになります

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@github-hoge:hoge/hoge-branch.git
    fetch = +refs/heads/*:refs/remotes/origin/*  ## developから変更
[branch "develop"]
    remote = origin
    merge = refs/heads/develop

以上です🙏
大体の場合は、fetch origin までで実現できるはずです!

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3