
Git 分支被删除后还能恢复吗
能恢复。本地分支删除后用 git reflog 找到分支最后指向的提交哈希,再 git checkout -b <分支名> <哈希> 重建。远程分支被删可从任意协作者的本地引用恢复。前提是该提交尚未被垃圾回收(默认 30 天内有效)。
聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

能恢复。本地分支删除后用 git reflog 找到分支最后指向的提交哈希,再 git checkout -b <分支名> <哈希> 重建。远程分支被删可从任意协作者的本地引用恢复。前提是该提交尚未被垃圾回收(默认 30 天内有效)。

用 git add -p(--patch)进入交互模式,逐块(hunk)选择 y 暂存、n 跳过、s 拆分、e 手工编辑,选完后 git commit 即可只提交文件中的部分修改。IDE(VS Code/JetBrains)也支持勾选行暂存。

创建标签两种方式:命令行 git tag -a v1.0.0 -m "说明" 后 git push origin v1.0.0(推荐附注标签);或在 GitHub 网页 Releases → Draft a new release 中创建标签并发布。轻量标签只是指针,附注标签含说明与签名。

从已有分支建分支:git checkout -b <新分支> <源分支> 一步完成(git switch -c 同效);或先 git checkout 源分支再 git branch 新分支。新分支从源分支当前提交起步,历史完全共享。

未暂存改动用 git diff > changes.patch,已暂存改动用 git diff --cached > changes.patch;应用补丁用 git apply changes.patch。适合跨机器搬运改动、临时备份工作区、不方便 push 时分享修改。

Git 2.0 起 push.default 默认值为 simple:git push 只推送当前分支到远程同名上游分支,分支名不一致或未设上游会报错。可用 git config push.default 修改,推荐显式 git push -u origin <分支>。

对比同一文件在不同提交间的差异:git diff <提交1> <提交2> -- <文件路径>。可用标签、HEAD~n 相对引用代替哈希;加 --word-diff 看行内差异,--stat 只看摘要。

Git 2.0 之后两者都会暂存新增、修改和删除,区别只在范围:git add -A 作用于整个仓库(无论在哪个子目录执行),git add . 只作用于当前目录及其子目录。老版本 Git 1.x 中 git add . 不暂存删除。

检出指定 tag:git fetch --tags 后 git checkout tags/<标签名>(进入游离 HEAD 状态);要在其上开发先 git switch -c <分支名>。只想下载代码可用 GitHub 的 Releases 页面或 git clone --depth 1 --branch <标签名>。

查看本地分支的跟踪关系:git branch -vv 列出每个本地分支对应的远程分支及领先/落后数;只查当前分支用 git rev-parse --abbrev-ref @{u} 或 git status 首行。

克隆带子模块的仓库:git clone --recursive <仓库地址>(等价 --recurse-submodules)。已经克隆了再补:git submodule update --init --recursive。更新子模块到最新用 git submodule update --remote。

在 master/main 上改错了地方?直接 git checkout -b <新分支> 即可——未提交改动会跟着你到新分支,再正常提交。改动跨分支冲突时才需要 git stash 中转。