可观测学堂

可观测问答

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

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

如何查看某个 stash 的具体改动内容(diff)

查看 stash 内容:git stash show -p 显示最新 stash 的完整 diff;指定某个用 git stash show -p stash@{2}。不带 -p 只看文件统计;应用前先在临时分支验证更稳妥。

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

.gitignore 如何排除整个文件夹但保留某个子文件夹

.gitignore 排除文件夹但保留子文件夹的写法:先 main/ 排除全部,再 !main/subfolder/ 取反保留。注意不能写 main/(整目录排除后无法取反),必须用星号配合感叹号逐层取反。

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

git pull 与 git fetch 有什么区别

git fetch 只把远程提交下载到本地(更新 origin/main 等跟踪引用),不动你的工作区;git pull = git fetch + git merge(或 rebase),会自动合并进当前分支。想先看远程改了什么再决定,就先用 fetch。

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

rebase 之后 git push 被拒绝怎么办

rebase 改写了提交历史(哈希全变),与远程分支产生分歧,Git 拒绝推送是保护机制。个人功能分支用 git push --force-with-lease 安全强推;共享分支不要 rebase,改用 merge。

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

git push 每次都要输入用户名密码怎么办

根治方案是改用 SSH:生成 ssh-keygen 密钥对,公钥添加到 GitHub,仓库远程地址换成 git@github.com:... 形式。继续用 HTTPS 则配置凭据管理器:osxkeychain、Git Credential Manager 等安全凭据助手,并使用 PAT 而非账号密码。

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

git push 报 "Authentication Failed" 怎么解决

认证失败的排查顺序:GitHub 已禁用密码认证,必须用 PAT 或 SSH;检查凭据管理器里是否存了过期凭据并清除重试;确认账号对该仓库有写权限;双因素认证开启时密码必然无效。

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

Git 报 "refusing to merge unrelated histories" 怎么办

该错误表示两个分支没有共同祖先(各自独立初始化)。确认确实要合并后加 --allow-unrelated-histories:git pull origin main --allow-unrelated-histories 或 git merge <分支> --allow-unrelated-histories,然后解决冲突提交。

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

Git 换行符 LF 与 CRLF 问题怎么解决

跨平台换行符问题用 .gitattributes 根治: text=auto eol=lf 强制仓库内统一 LF。Windows 开发者设 core.autocrlf=true,Mac/Linux 设 core.autocrlf=input。批量修复现有文件用 git add --renormalize .。

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

如何只 stash 某个特定文件的改动

stash 指定文件:git stash push -- <文件路径>,可带 -m 写备注;多个文件列多个路径。恢复用 git stash pop 或 git stash show -p 查看内容。

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

git stash pop 与 git stash apply 的区别

两者都把 stash 的改动恢复到工作区,区别是:pop 应用成功后删除该 stash 条目,apply 保留条目。想重复应用同一 stash(比如到多个分支)用 apply;一次性恢复用 pop 更干净。

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

Git 如何撤销工作区所有改动(包括新文件)

彻底回到上次提交状态:git restore .(或 git checkout -- .)丢弃已跟踪文件的改动,git clean -fd 删除未跟踪的新文件和目录。两步都要才能完全干净;clean 前先 -n 预览。操作不可逆,谨慎执行。

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

.gitignore 与 .gitkeep 有什么区别

.gitignore 是 Git 原生功能,按规则忽略不想跟踪的文件;.gitkeep 只是社区约定的空文件,用来让 Git 能够提交空目录(Git 不跟踪空目录)。一个管"别跟踪",一个管"保留目录"。