Git分支本质是指向某次提交的轻量级指针,创建分支即新建指针而非复制代码;git branch仅建指针不切换,git checkout -b或git switch -c则同时创建、切换并更新工作区。

Git 创建分支不是“新建一个名字”就完事,核心在于指针指向和工作区状态是否符合预期。直接 git branch name 不切换、不清理文件、不拉远程历史——多数人卡在这一步。
git branch 与 git checkout -b 的本质区别
git branch feature/login 只是创建一个指向当前提交的本地引用,HEAD 仍停在原分支,工作区文件完全不变;而 git checkout -b feature/login 是原子操作:先创建分支,再把 HEAD 指过去,并同步更新工作区文件到该分支最新状态。
- 如果你刚
git pull origin main更新了本地main,此时执行git branch feature/login,新分支会指向main最新提交;但你仍处在main分支上,容易误提交到主分支 -
git checkout -b后立刻git status显示 “On branch feature/login”,这才是安全起点 - Git 2.23+ 推荐用
git switch -c feature/login替代git checkout -b,语义更明确,且不会意外检出文件(当参数歧义时)
基于远程分支创建本地开发分支的正确流程
想从 origin/main 拉一个干净分支,但 git checkout -b dev origin/main 报 fatal: Not a valid object name: 'origin/main'?因为 origin/main 是远程引用,不是本地已存在的分支。
- 必须先运行
git fetch origin,把远程分支元数据同步到本地(此时origin/main才可被识别) - 再执行
git switch -c dev-feature --track origin/main(推荐)或git checkout -b dev-feature origin/main - 不要省略
--track或-b的远程参数,否则新分支默认跟踪本地main,而非远程最新 - 验证是否成功:运行
git branch -vv,应看到dev-feature后面标有[origin/main]
创建真正“空分支”的实操要点
所谓“空分支”(如 gh-pages),是指不含任何历史提交、不继承当前仓库任何 commit 的分支。Git 强制要求分支必须指向一个提交,所以“空”其实是“指向空树提交”。
- 用
git switch --orphan docs(Git ≥2.28)或git checkout --orphan docs,执行后git status会显示 “all files deleted”,但磁盘文件还在——这是 Git 故意留给你手动清理 - 立刻执行
git rm -rf .删除所有已跟踪文件;若项目有.gitignore,建议也rm .gitignore,避免后续git add .漏掉关键静态资源 - 此时
git branch还看不到docs,因为没 commit;只有执行git commit --allow-empty -m "init docs"或添加文件后正常 commit,分支才真正存在 - 推送到远程前,务必确认远程无同名分支:
git ls-remote --heads origin docs;若有,先git push origin :docs删除,再git push origin docs
删分支时最容易忽略的三件事
git branch -D feature/old 只删本地,对远程零影响;很多人以为删了本地就等于“废弃”了分支,结果下次 git fetch 还会拉下来。
- 删远程分支必须用
git push origin --delete feature/old(语义清晰)或git push origin :feature/old(冒号前有空格) - 删完远程后,本地仍保留
origin/feature/old这个远程跟踪引用,运行git fetch --prune或git remote prune origin才能清理干净 - 如果分支已被合并,
git branch --merged可列出所有可安全删除的本地分支;但注意:它只检查「是否被当前 HEAD 合并」,不保证是否已推送到远程
分支不是命名空间,而是指向 commit 的指针;切换分支的本质是重置工作区和暂存区。所有“奇怪行为”——比如切过去代码变旧、push 被拒、空分支推不上去——几乎都源于对指针位置和远程/本地状态同步关系的误判。


















