可观测学堂

可观测问答

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

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

如何向 Git 仓库提交空目录

Git 不跟踪空目录,惯例做法是在目录里放一个 .gitkeep 空文件再提交;如果目录内容应被忽略,配合 .gitignore 写 logs/* 与 !logs/.gitkeep 两条规则,保留目录结构同时忽略产物。

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

如何把某个历史提交拆分成多个提交

拆分历史提交用交互式 rebase:git rebase -i <目标提交>^,把该条目标记为 edit;暂停后 git reset HEAD^ 打散该提交,分多次 git add -p + git commit,最后 git rebase --continue 完成。

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

如何修改单个提交的作者信息

改最近一次提交的作者:git commit --amend --only --author="名字 <邮箱>"。改历史中间的提交:git rebase -i <提交>^ 标记 edit,再 amend --author。批量改用 git filter-repo --email-callback。已推送的历史改写后,需协调并使用带保护的强推。

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

Git 提交信息(commit message)写错了怎么修改

最近一次提交用 git commit --amend --only -m "新信息";已推送且与协作者确认允许改写时可用 git push --force-with-lease;lease 不证明无人拉取。历史中间的提交信息用 git rebase -i 标记 reword 修改。共享分支不要改写已推送历史。

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

如何检出(切换到)远程 Git 分支

检出远程分支:git fetch 后 git checkout <分支名>,本地不存在且远程跟踪分支唯一匹配时自动创建并跟踪;也可显式 git checkout --track -b <名> origin/<名>。只查看代码可用 git checkout origin/<名>。

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

如何 cherry-pick 多个提交

cherry-pick 多个提交:连续的用范围 git cherry-pick A^..B(含 A)或 A..B(不含 A);不连续的逐个列出 git cherry-pick A B C。冲突时解决后 git cherry-pick --continue。

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

如何把 Git 仓库克隆到指定目录

克隆到指定目录:git clone <仓库地址> <目录名>;克隆到当前目录(已存在的空目录)用 git clone <地址> .(注意句点)。目标目录必须不存在或为空。

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

如何克隆仓库的所有远程分支

普通 git clone 通常获取可见且 refspec 覆盖的分支历史,默认只建立一个本地分支;浅克隆等会限制范围。检出任意远程分支用 git checkout <分支名>。git clone --mirror 镜像可见引用;迁移前须确认目标可被覆盖,LFS 和子模块另行处理。

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

Git 如何提交仅大小写变化的文件改名

大小写不敏感系统(Windows/macOS 默认)上,直接把 name.txt 改成 Name.txt Git 检测不到。用 git mv name.txt Name.txt 强制登记;不行就两步走:先 git mv 到临时名提交,再 git mv 回目标名提交。

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

如何比较本地分支与远程分支的差异

先 git fetch 刷新远程引用,再 git diff main origin/main 看文件差异、git log main..origin/main 看远程多出的提交、git log origin/main..main 看本地多出的提交。git status 也会提示领先/落后数。

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

如何比较两个 Git 分支的差异

比较两个分支:git diff 分支A 分支B 看代码差异;git log 分支A..分支B 看 B 独有的提交;git diff A...B(三点)看 B 自分岔点起引入的改动。三点用于查看B相对merge-base的改动,不预测合并结果。

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

如何让 Git 只在本机忽略某些文件(不共享 .gitignore)

本机私有忽略两种方式:未跟踪文件写入 .git/info/exclude(语法同 .gitignore,不进版本库);已跟踪文件的本地改动用 git update-index --skip-worktree <文件>。个人 IDE 配置也可放全局 ~/.gitignore_global。