ローカルにないリモートブランチを、ローカルに反映したい
基本はこれでできるはず
例えばこんな状況で、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
までで実現できるはずです!