
如何 fetch 所有 Git 分支
git fetch --all 获取未被 skipFetchAll 排除的各远程,分支范围仍由 fetch refspec 决定;只更新 origin 用 git fetch origin。默认更新远程跟踪引用,自定义映射需另行核对。
聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

git fetch --all 获取未被 skipFetchAll 排除的各远程,分支范围仍由 fetch refspec 决定;只更新 origin 用 git fetch origin。默认更新远程跟踪引用,自定义映射需另行核对。

找回被删文件:git log --diff-filter=D -- <路径> 定位删除提交,然后 git restore --source=<删除前的提交>^ <路径> 恢复。不记得路径用 git log --name-status 或 git log -S"文件内容关键词" 搜。

列出历史上的删除记录:git log --diff-filter=D --summary 显示所选可见历史中的删除文件及所在提交;按内容搜用 git log -S"关键词";确认路径后 git log --all -- <路径> 追踪当前可见路径历史,重命名和浅克隆会限制范围。

定位文件的删除提交:git log --diff-filter=D --format 带作者日期 -- <路径>,最后一条就是删除提交;git show <哈希> 看删除现场(改了哪些文件、提交信息)。配合 git blame 其父提交可追溯此前每行的来历。

强制以远程为准覆盖本地:git fetch origin 后 git reset --hard origin/<分支名>,当前分支、索引与跟踪文件对齐目标,未提交跟踪改动会丢弃;未跟踪文件再加 git clean -fd。执行前确认本地工作确实可以丢弃或先 stash 备份。

普通独立仓库中,删除 .git 隐藏目录即解除版本控制(文件保留);连代码一起删则删整个项目目录。命令:rm -rf .git。记得检查是否有对应远程仓库需要一并删除。

获取当前提交哈希:git rev-parse HEAD(SHA-1 为 40 位,SHA-256 为 64 位);短哈希用 git rev-parse --short HEAD。脚本中常用它做版本标记、构建号、镜像标签。

全历史搜索代码:git grep "模式" $(git rev-list --all) 搜索本地引用可达提交的快照,大历史需循环避免参数过长;git log -S"字符串" 找该字符串出现次数变化的提交;git log -G 支持正则。这是代码考古的标配组合。

判断分支是否已合并:git branch --merged main 列出顶端提交可从 main 到达的分支(不带 main 时默认 HEAD);精确判断用 git merge-base --is-ancestor <分支> main && echo merged;看远程分支用 git branch -r --merged。

列出提交涉及的文件:git show --name-only --oneline <哈希>,或脚本友好的 git diff-tree --root --no-commit-id --name-only -r -z <哈希>。带增删改状态用 --name-status,看统计用 --stat。

查看包含某提交的分支:git branch --contains <提交哈希>,加 -a 包含远程分支,-r 只看远程。查标签用 git tag --contains。判断"这个修复进了哪些发布分支"时最常用。

列出未推送提交:git log origin/main..HEAD(当前分支相对上游);全仓库范围用 git log --branches --not --remotes --oneline。这些结果基于本地引用;ahead 看提交可达性,git cherry -v 看补丁等价,不证明从未发布。