WSL(Ubuntu)搭配Windows Terminal使用Git修改默认分支名为main不生效如何解决
常见原因及对应解决方案
原因1:Git版本低于最低要求
init.defaultBranch配置是Git 2.28.0版本才新增的功能,低于该版本的Git无法识别该配置,会默认使用master作为初始分支名。
排查方法:
执行命令查看当前Git版本:git --version
如果返回的版本号小于2.28.0即可确认是该问题。
解决方法:
升级WSL Ubuntu环境的Git到最新版本:
sudo add-apt-repository ppa:git-core/ppa sudo apt update sudo apt install git
升级完成后再次验证版本号,重新执行git init即可生效。
原因2:更高优先级的配置覆盖了全局配置
Git配置的优先级为:仓库级配置 > 全局用户配置 > 系统级配置,如果系统级配置或者当前环境变量中存在init.defaultBranch的其他配置,会覆盖你设置的全局配置。
排查方法:
执行命令查看所有生效的配置及来源:git config --list --show-origin | grep init.defaultBranch
如果返回结果中存在除~/.gitconfig(全局配置路径)以外的其他路径(比如/etc/gitconfig系统配置路径)的配置值为master,即可确认是覆盖问题。
解决方法:
修改更高优先级的配置项,比如修改系统级配置:sudo git config --system init.defaultBranch main
也可以直接删除对应路径下的init.defaultBranch配置项,让全局配置生效。
原因3:WSL默认调用了Windows版本的Git
如果你的WSL PATH中Windows系统路径优先级高于WSL本地二进制路径,会导致你执行git命令时实际调用的是Windows系统安装的Git,此时你在WSL中设置的全局配置(存放在WSL用户目录~/.gitconfig)对Windows Git不生效。
排查方法:
执行命令查看Git的执行路径:which git
如果返回的路径为/mnt/c/开头的Windows挂载路径(比如/mnt/c/Program Files/Git/cmd/git.exe)即可确认是该问题。
解决方法:
二选一即可:
- 方案一:使用WSL本地Git:先执行
sudo apt install git安装WSL侧的Git,再在用户shell配置文件(~/.bashrc或~/.zshrc)末尾添加export PATH=/usr/bin:$PATH,执行source ~/.bashrc(或对应zsh的配置文件)调整路径优先级即可。 - 方案二:继续使用Windows Git:在Windows侧的PowerShell或Git Bash中执行
git config --global init.defaultBranch main,设置Windows侧Git的全局配置即可生效。
原因4:Git别名强制指定了初始分支名
如果你给git init配置了别名,强制附加了-b master参数,会覆盖所有配置的默认分支值。
排查方法:
执行命令查看所有Git相关别名:alias | grep git
如果返回结果中存在git init相关的别名带-b master参数即可确认是该问题。
解决方法:
删除shell配置文件中对应的别名配置即可。
临时兜底方案
如果暂时不想排查根因,每次初始化仓库时可以直接指定分支名:git init -b main
内容的提问来源于stack exchange,提问作者Joseph Hinkle

