こんにちは、つくたろうです。
VSCodeとGithubを同期する際に、同期先のブランチ名が勝手に「origin/master」になってしまうところでハマってしまいました。
おそらく解消できたのでメモ。
起きた問題
VSCodeでレポジトリに変更を行って保存し、add・commitすると、「変更の同期」と表示が出ます。
これを押すと「このアクションは、'origin/master'との間でコミットをプッシュおよびプルします」と出ます。
このとき、Githubにてmaster
というブランチで作業していればいいですが、おそらくここ最近新しく作ったプロジェクトの場合デフォルトブランチはmain
になっているかと思われます。
2020年にデフォルトブランチの名前がmaster
からmain
になったためですね。
github.blog
そのため、「master」というブランチが無い状態で作業している場合に、「このアクションは、'origin/master'との間でコミットをプッシュおよびプルします」の画面で「OK」を押すと十中八九以下のように「Git: fatal: couldn't find remote ref master」と出てエラーになるはずです。
そして、同期ができなくなる。これは困った。
そもそも「master」なんて作ってないブランチ使いたくないし…
原因
エラーメッセージの通り「master」のブランチが見つからないので同期できない。
しかし、VSCodeの同期ボタンは勝手に「origin/master」と同期するようになってしまっている。
これが原因っぽい。
同期ボタンを押したときに「origin/main」に同期するように変えられれば解決すると思われる。
configあたりで変えられないかなと思って
git config --local --list
を打ってみたところ、以下のようにbranch.main.merge=refs/heads/master
という記述がありました。
これが同期先を決めているっぽいので、これをrefs/heads/mian
に変えてしまえばいいはず。
*注:僕は複数のGitとGithubを使いたくてプロジェクトごとにローカルのconfigを設定しています。なのでconfigをいじるコマンドも--local
で使っています。
使い分けしていない人はグローバルでも同じ設定はできると思いますが、その際はコマンドの--local
を適宜--global
に変えてください。
まあそもそもグローバルでこの問題が起こるかは自分が使っていないのでよくわかりませんが。。。(笑)
解決法
ということで、先述の通りconfigのbranch.main.merge
をrefs/heads/mian
に変えてしまいましょう。
以下のコマンドを入力すれば変えられるはず。
git config --local branch.main.merge refs/heads/main
実際に変わったかどうか、もう一度
git config --local --list
で確認すると、
変わっていますね。ひとまずOK。
この状態でもう一度先ほどの「変更を同期」ボタンを押すと、
今度は「このアクションは、'origin/main'との間でコミットをプッシュおよびプルします」表示が出てきます。
同期先が「origin/master」から「origin/main」にちゃんと変更できていると思って良さそうです。
実際に「OK」を押すと、「変更を同期」ボタンが消え同期がうまくいったことが分かります。
これで一安心ですね。
おわりに
今回は、VSCodeがデフォルトでGithubの「origin/master」に同期してしまう問題を、configの同期先を「origin/main」に書き換えることで解消しました。
なにかうまくいかないときはまずconfigを見る癖をつけたいところですね。
僕は大学の課題などのほかにもブログ用にちまちまコードを書いているのですが、これを管理したいなと思って個人開発でのGithub利用を導入したところです。
www.tsukutarou.net
書いたコードについてなどの記事もこれから書いていくつもりなので、これからも読んでいただけると嬉しいです!
ここまで読んでくれて、ありがとうございました!
2021/12/02 つくたろう
P.S. こちら↓の書籍がわりとよかったのでお勧めしておきます。