可观测学堂

可观测问答

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

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

如何让 Git 停止跟踪已加入 .gitignore 的文件

文件被跟踪后加入 .gitignore 不生效,需先移出索引:git rm --cached <文件>(目录加 -r),提交后 gitignore 规则才接管。本地文件不受影响,只是 Git 不再跟踪其变化。

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

如何把多个提交压缩成一个合并到目标分支(Squash Merge)

把多个提交压成一个合入目标分支:切到目标分支执行 git merge --squash <源分支>,再 git commit 写一条总括信息即可。GitHub 的 Squash and merge 按钮同理。源分支后续应删除避免重复冲突。

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

如何只合并某个特定提交

合并单个提交用 cherry-pick:git cherry-pick <提交哈希>,把该提交的改动以新提交应用到当前分支。多个连续提交用 A^..B 范围,加 -n 只应用不提交。

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

如何合并两个独立的 Git 仓库(保留双方历史)

合并两个仓库并保留历史:把源仓库加为远程,git fetch 后用 git merge --allow-unrelated-histories 合并其分支。想把源仓库放进子目录,用 git subtree add 或先 filter-repo 重写路径再合并。

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

如何修改历史中的某个特定提交

修改历史提交用交互式 rebase:git rebase -i <目标提交>^,把该行改为 edit;暂停后修改文件并 git commit --amend,然后 git rebase --continue。该提交之后的所有提交哈希都会变。

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

如何把最近的提交移动到新分支

把误提交到 main 的最近提交移到新分支:git branch 新分支名(在当前提交建分支),git reset --hard HEAD~N(原分支退回 N 步),git checkout 新分支名。提交零损失完成转移。

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

如何正确地强制推送(force push)

强推的正确姿势是 git push --force-with-lease:推送前校验远程分支没有别人新推的提交,比 --force 安全。强推用于 rebase/amend 后更新个人分支;共享分支禁用。步骤:fetch 确认 → --force-with-lease → 通知协作者。

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

如何清理远程已删除的本地跟踪分支

清理失效的远程跟踪引用:git fetch --prune(或 git remote prune origin)删除远程已不存在的 origin/ 引用;本地残留的对应分支用 git branch -vv 找 ": gone]" 标记后批量删除。

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

如何把本地分支 rebase 到最新的远程 main

同步主分支最新代码到功能分支:git fetch origin 后 git rebase origin/main(在功能分支上执行),冲突逐个解决后 git rebase --continue。已推送过的分支 rebase 后需 --force-with-lease 强推。

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

如何从 Git 仓库中删除目录

删除被跟踪的目录:git rm -r <目录> 并提交;保留本地文件只停止跟踪用 git rm -r --cached <目录>。从历史中彻底抹除(大文件瘦身)用 git filter-repo --path <目录> --invert-paths。

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

如何清除 Git 仓库中的 .DS_Store 文件

清除已提交的 .DS_Store:find . -name .DS_Store 配合 git rm --cached 移出索引并提交;然后加入 .gitignore,最好配置全局忽略 git config --global core.excludesFile 防止再次混入。

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

如何把某个文件从最近一次提交中剔除

把文件移出最近一次提交:git restore --staged <文件> 撤出暂存后用 git commit --amend 重建提交;或 git reset --soft HEAD^ 后重新提交时排除该文件。已推送的提交需强推。