
如何更换 Git 默认的提交信息编辑器
更换 Git 默认编辑器:git config --global core.editor,如 VS Code 用 "code --wait",nano 直接写 nano,Vim 写 vim。--wait 类参数保证 Git 等编辑器关闭后再继续。
聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

更换 Git 默认编辑器:git config --global core.editor,如 VS Code 用 "code --wait",nano 直接写 nano,Vim 写 vim。--wait 类参数保证 Git 等编辑器关闭后再继续。

选择性合并的手段:整个提交用 git cherry-pick;单个文件用 git checkout 分支 -- 路径;文件内部分改动用 git checkout -p 交互挑选;不想提交先合试用 git merge --no-commit --no-ff。

查看全局 Git 配置:git config --global --list;看全部生效配置(含来源)用 git config --list --show-origin;查单个值用 git config --get user.email。配置文件在 ~/.gitconfig。

压缩最近 N 个提交:git rebase -i HEAD~N,把除第一条外的 pick 全改成 squash 或 fixup,保存后编辑最终提交信息。改写已发布历史需协调推送;操作前保全未提交工作并检查待压缩范围。

git stash 默认不包含未跟踪文件,加 -u(--include-untracked):git stash -u;连 .gitignore 忽略的文件也要收用 -a(--all)。只收未跟踪文件可用 git stash push -u -- <路径>。

给旧提交打标签:git log 找到提交哈希,git tag -a <标签名> <哈希> -m "说明",然后 git push origin refs/tags/<标签名>:refs/tags/<标签名> 推送。标签指向提交而非分支,补打历史版本标签完全合法。

撤销 amend:git reflog 找到 amend 前的提交哈希,git reset --soft <原提交哈希> 即可恢复。amend 只是生成了新提交,恢复依赖本地 reflog 和提交对象仍保留,不保证固定30天内随时可回。

撤销暂存:git restore --staged <文件>(Git 2.23+)或旧语法 git reset HEAD <文件>;当前目录及子目录取消暂存用 git restore --staged .,全仓操作先到仓库根目录。只动暂存区,工作区改动原样保留。

rebase 完成后想撤销:git reflog 找到 rebase 前的分支顶端(通常是 rebase 动作记录上方的条目),git reset --hard <哈希> 恢复。rebase 不改写对象只新建提交,原历史在 reflog 窗口期内都可找回。

撤销 reset:git reflog 找到 reset 前的提交哈希,先建恢复分支保存该提交;hard 只恢复提交快照且会覆盖当前未提交改动。soft/mixed reset 后改动还在工作区/暂存区可直接重提;hard reset 前的已提交快照仅在 reflog 和对象仍保留时可找回。

撤销最近提交按需求选:保留改动到暂存区 git reset --soft HEAD^;保留到工作区 git reset HEAD^;丢弃跟踪改动 git reset --hard HEAD^;只想修正内容用 git commit --amend。已推送用 git revert。

撤销已推送提交的安全做法是 git revert <哈希>:生成反向提交,不改写历史,push 后仍可能有冲突或后续合并影响。改写共享历史前须核实协作者依赖、远端状态和团队约定,个人分支也不例外。