可观测学堂

可观测问答

聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

Git 分支协作与合并示意
技术指南

如何 fetch 所有 Git 分支

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

Git 分支协作与合并示意
技术指南

如何找回 Git 仓库中被删除的文件

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

Git 提交历史与版本恢复示意
技术指南

如何在 Git 提交历史中查找被删除的文件

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

Git 分支协作与合并示意
技术指南

如何查清文件是什么时候、被谁删除的

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

Git 分支协作与合并示意
技术指南

如何强制 git pull 覆盖本地改动

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

Git 分支协作与合并示意
技术指南

如何彻底删除 git init 创建的仓库

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

Git 提交历史与版本恢复示意
技术指南

如何获取当前提交的哈希值

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

Git 提交历史与版本恢复示意
技术指南

如何在整个 Git 历史中搜索代码内容(grep)

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

Git 分支协作与合并示意
技术指南

如何判断分支是否已经合并

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

Git 提交历史与版本恢复示意
技术指南

如何列出某个提交包含(改动)的所有文件

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

Git 提交历史与版本恢复示意
技术指南

如何查看哪些分支包含某个提交

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

Git 提交历史与版本恢复示意
技术指南

如何列出所有未推送的本地提交

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