Githubからあるリポジトリをcloneしたあと,ブランチ名を変更した.そしていくつかの変更をcommit後に,pushした. しかし,vscodeの機能にある,gitのリモートとの差を表すものが更新されなかった.

20211224-vscode-git-upstream-0.png

これはローカルの追跡ブランチが変わっていないために生じる問題のようだったので,この解決方法とそれに関係するコマンドをメモする.

環境

git --version
git version 2.30.1 (Apple Git-130)
sw_vers
ProductName:    macOS
ProductVersion: 12.1
BuildVersion:   21C52

最初に結論

追跡ブランチを origin/main に変更する場合,以下のコマンドを実行すればよい.

git branch -u origin/main

流れ

きっかけ

Githubからリポジトリをcloneしたのち,ブランチ名をmasterからmainに変更した.そしていくつかの変更をcommit後に,pushした. しかし,vscodeの機能にある,gitのリモートとの差を表すものが以下の画像の通り更新されなかった.

20211224-vscode-git-upstream-0.png

この機能が,拡張機能だったか,デフォルトでついている機能だったか覚えていない…

ちなみに,執筆時点でgit関係で入れている拡張機能は以下.

これには「追跡ブランチ」が関係していることを突き止め,解決した.

現在のブランチが追跡している追跡ブランチの確認

まず,

git checkout <branch name>

などで,確認したいブランチに移動する.

自分の場合は,

git branch -m main

を行なってmasterブランチをmainブランチにRenameした.

そのあと,確認したいブランチ上で以下のコマンドを実行.

git branch -vv

実行結果例は以下.

* main 09d86d4 [origin/master: ahead 4] Update README.

この通り,git branch -m mainではローカルのブランチ名が変更されただけで,追跡ブランチの名前が変わっていないため4commit分遅れているよ,と言われている. これがきっかけに示した画像に表示されている数である4と一致していたのでこれが原因である可能性が濃厚と考えた.

追跡ブランチの変更結果

したがって,結論に示した通り以下のコマンドを実行して,追跡ブランチを変更.

git branch -u origin/main

このコマンドを実行したあと,再度追跡ブランチの状況を確認すると,以下になった.

git branch -vv
* main 09d86d4 [origin/main] Update README.

このように遅れがなくなり,追跡ブランチも変更されたことが確認できる.

また,以下の通りリモートからの遅れがないよ,と表示が変更された. 20211224-vscode-git-upstream-1.png

コメント

たぶん,変更しなくても大きな問題はないのかもしれないが,pushしたのかどうかを直感的に確認できる状態にしておくことはわかりやすくていいなと思った.

この概念を100%理解するためにはHEADブランチとかリモートブランチとか複雑?な概念を理解する必要があるので奥が深いなと思いつつ,とりあえずやり方を覚えようと思う.

今後mainでブランチが作成されるのが普通になっていったらあまり使わなくなるものかもしれないなとも考えた.

参考