BLOGHOMECATEGORY
Souce Tree上でMainブランチをリネームしたらPullするたびにブランチを選び直さないといけなくなった対処法

2026/07/25 13:04

updateIcon

2026/07/25 13:08

経緯

今までMain = 開発ブランチ・release = リリースブランチ として運用してきたが、Mainよりdevの方がわかりやすいのでは?と思い、ローカルとリモートのMainブランチをリネームした。

そしたら、Sourcetree で pull しようとすると、「プルするリモートのブランチ」が毎回 main のままになっていて、毎回ドロップダウンを開いて dev に選び直す必要出てきてしまった。めんどーーい。。

まず現状を確認する

git branch -vv を実行すると、ブランチごとの追跡先が表示される。

$ git branch -vv
  * dev                      e0b570a [origin/main: gone] Merge pull request #91 ...
    docs/component-structure a1ae698 [origin/docs/component-structure] ref 引数名...
    release                  ee2a48a [origin/release] Merge pull request #88 ...    

dev の行がおかしい。[origin/main: gone]??

ローカルの devorigin/main を追跡していて、gone は追跡先に設定されているリモートブランチが、もう存在しないということ。

実際、リモートのMainもリネームしたため、リモートにも main は無いが、 Sourcetree の Pull は、この追跡先の設定を読んでドロップダウンの初期値にしている

$ git branch -r
    origin/desgin-renewal
    origin/design/feat/make-css-token
    origin/dev
    origin/docs/component-structure
    origin/release  

SorceTreeでのリネームの挙動

1. リモート側のブランチを dev に切り替える

2. fetch --prune で手元のリモート追跡ブランチを更新(origin/devが現れ、origin/main が消える)

3. ローカルブランチを maindev にリネームする

までで、「ローカル dev の追跡先を origin/dev に貼り直す」という作業はやってくれないっぽい...。

ブランチ追跡先の変更

追跡先は .git/configremote(どのリモートか)と merge(そのリモートのどのブランチか)の 2 つで記録されている。

# リネーム前
[branch "main"]
      remote = origin
      merge = refs/heads/main

# リネーム後 ← セクション名は変わるが、merge の値は据え置き
[branch "dev"]
      remote = origin
      merge = refs/heads/main   ★ ここが取り残される

直し方

以下のコマンドで修正可能

$ git branch -u <リモートのブランチ名> <ローカルのブランチ名>

$ git branch -vv
* dev  e0b570a [origin/dev] Merge pull request #91 ...

gone が消えて [origin/dev] になった!

.git が見当たらないとき

.git はドット始まりの隠しディレクトリなので、VS Code の既定では表示されなので、Finderから隠しファイルの表示


次からブランチをリネームするとき

git branch -m <変更前> <変更後>   # ローカルをリネーム
git push -u origin <変更後>      # -u で追跡先も更新
git push origin --delete <変更前>   # リモートの旧ブランチを削除

まとめ

GItをGUIで操作できるのは便利だけど、裏で何が起こってるかわからないから意図しない挙動が起こりやすいなーという知見を得た

あと、Git関連の不可解な挙動の正体が .git/config を一度確認してみるといいっぽい!

github