
如何查看某个 stash 的具体改动内容(diff)
查看 stash 内容:git stash show -p 显示最新 stash 的完整 diff;指定某个用 git stash show -p stash@{2}。不带 -p 只看文件统计;应用前先在临时分支验证更稳妥。
聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

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

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

普通 clone 配置下,git fetch 下载远程提交并更新 origin/main 等跟踪引用,不修改工作区;git pull 在 fetch 后按选项和配置执行 merge、rebase 或仅允许快进。想先看远程改了什么再决定,就先用 fetch。

rebase 改写已发布提交后可能与远程历史分叉,Git 会拒绝非快进推送。个人功能分支核对远端旧提交后可用显式 force-with-lease;共享分支应先协调,避免直接改写历史。

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

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

该错误表示当前可见历史中找不到共同祖先,常见于独立初始化,也需排除浅克隆缺失历史。确认确实要合并后加 --allow-unrelated-histories:git pull --no-rebase origin main --allow-unrelated-histories 或 git merge <分支> --allow-unrelated-histories,然后解决冲突提交。

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

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

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

在仓库根目录用 git restore --source=HEAD --staged --worktree -- . 丢弃已跟踪改动,再用 git clean -fd 清理普通未跟踪文件;默认保留忽略文件。clean 前先 -n 预览,重要改动先备份。

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