git分支创建失败多数因权限问题:本地目录无写权限、远程无push权限、gerrit/gitea等平台有分支保护规则。需分层排查——本地检查目录权限与index.lock,远程确认用户角色、分支策略及推送协议,gerrit必须用refs/for/xxx推送评审。

Git分支创建失败,多数时候不是命令写错了,而是权限卡住了——本地没写权限、远程没 push 权限、Gerrit 或 Gitea 还有额外保护规则。直接看怎么破。
本地仓库目录无写权限导致 git branch 失败
执行 git branch -c feature/login 或 git checkout -b feature/login 时卡住、报错或静默失败,常见于 Docker 容器、NFS 挂载目录、sudo 创建的项目目录等场景。
- 先检查当前目录权限:
ls -ld .,若显示所有者是root或组权限不含w,当前用户就无法写入.git/refs/heads/ - 临时修复(推荐):
sudo chown -R $USER:$USER .git(注意只改.git,别误伤源码) - 长期方案:避免用
sudo git init;Docker 启动时加--user $(id -u):$(id -g);NFS 挂载确保uid/gid映射一致 - 别忽略
index.lock残留:运行find . -name "index.lock" -delete清理后再试
Gitea/GitLab 等平台页面点击“创建分支”无反应或提示权限不足
这不是 Git 命令问题,而是后端鉴权拦截。Gitea 中只有具备 Push 或 Admin 权限的用户才能创建分支,Read 权限用户点按钮等于白点。
- 确认权限:进入仓库 → Settings → Collaborators,查自己角色是否为
Push或更高 - 检查分支保护规则:Settings → Branch Protection → 查看是否对
main或目标基分支启用了“仅 Admin 可创建子分支”类策略 - 绕过页面限制:用命令行创建本地分支再推送(前提是已有 push 权限):
git checkout -b feature/x && git push -u origin feature/x - 若真没权限:联系 Owner 或 Admin,在 Collaborators 页面给你分配
Push角色
Gerrit 推送分支报 prohibited by Gerrit: not permitted: update
Gerrit 不允许普通用户直推 refs/heads/xxx,必须走 refs/for/xxx 提交代码评审(CR)。这是设计使然,不是权限配置错了。
- 先确保本地有对应分支:
git checkout -b subota_qnx origin/subota_qnx(避免 detached HEAD) - 必须带 Change-Id:安装
commit-msg钩子(从 Gerrit Web 页面下载),否则推送会被拒 - 推送命令不是
git push origin subota_qnx,而是:git push origin subota_qnx:refs/for/subota_qnx - 如果目标分支受保护(如
main),即使有权限也需走refs/for/main,不能绕过评审流
远程仓库拒绝创建分支但本地能切、能提交
现象是 git push origin new-branch 报错 remote rejected,而 git branch 和 git commit 全部正常——说明问题出在远程端,本地完全没问题。
- 先验证远程地址和协议:
git remote get-url origin,HTTPS 地址要配 PAT(Personal Access Token),SSH 要确认密钥已加载且添加到平台 - 检查是否被组织级策略拦截:比如 GitHub Enterprise 或 GitLab Self-Managed 启用了 branch creation policy,仅允许特定正则命名(如
feat/.*) - GitCode/Gitee 等平台私有仓库常要求「先 Fork 再向自己的远程推」,直接推原仓库会 403 —— 此时应 fork 后改 remote:
git remote set-url origin git@gitcode.com:yourname/repo.git - 最易忽略的一点:有些平台(如旧版 Gitea)不支持通过
git push创建新分支,必须进 Web 页面手动点“New Branch”
权限问题从来不是非黑即白的判断,git branch 成功不代表 git push 能过,Web 页面不可点也不代表命令行不行——得一层层拆开看是本地文件系统、Git 本身、远程平台鉴权,还是评审流程强制约束。











