Git 基本操作与安全撤销指南
本文目录
Git 日常操作围绕三处状态展开:工作区是当前文件,暂存区(index)是下一次提交的候选快照,提交历史是已记录的快照。先用 git status 看清状态,再选操作;尤其不要把 reset --hard 当作普通撤销按钮。
1. 设置提交身份
提交身份记录在 commit 元数据里,不是 GitHub 登录凭据。个人机器可以设置全局默认,也可以在当前仓库单独覆盖:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --local user.email "work-address@example.com"
git config --show-origin --get-regexp "^user\.(name|email)$"
在公共项目里提交前确认邮箱是否会公开;Git 作者邮箱与远程托管平台的认证方式是两回事。查看配置时避免把含 token 的 URL、credential helper 输出或私钥粘贴到工单和聊天。
2. 检查、暂存和提交
git status --short --branch
git diff
git diff --cached
git add path/to/file
git diff --cached --check
git commit -m "fix: describe the user-visible change"
git diff 看未暂存改动,git diff --cached 看已经加入下次提交的内容。初学时优先使用具体文件路径,不要不加检查地 git add .;暂存后再次检查 diff,防止提交凭据、构建产物或无关文件。git add -p 可以按 hunk 选择一部分改动。
提交说明应概括改动目的。git commit -m 不是每种场景都必须:省略 -m 会打开编辑器写完整说明;团队若有 commitlint 规则,以仓库文档和实际配置为准。
3. 查看历史与文件变化
git log --oneline --decorate --graph -20
git show --stat --oneline HEAD
git show <commit> -- path/to/file
git diff <base>...HEAD
分享终端截图前检查分支名、远程地址、用户目录和 diff 内容是否包含私有信息。远程地址可用 git remote -v 查看,但若 URL 中误带凭据,不要截图或复制;应立即改用安全认证并轮换已暴露凭据。
4. 删除文件和撤销单文件改动
git rm path 会删除工作区文件并把删除加入暂存区;rm path 或文件管理器删除只改工作区,仍需检查状态并用 git add -u -- path 或 git rm --cached path 等合适操作更新暂存区。二者都不是“从 Git 历史中抹掉数据”;已提交的秘密仍可能留在历史、远端克隆和缓存中。
git restore --staged path 仅把文件从暂存区撤下,不会清掉工作区修改。git restore path 会用暂存区内容覆盖该文件的未暂存修改,可能丢失本地编辑。若不确定,先复制到仓库外或新建临时分支,再操作。
git status --short
git diff -- path/to/file
git restore --staged path/to/file
git restore --source=HEAD -- path/to/file
第二个 restore 示例会让指定文件回到 HEAD 版本。运行前确认路径准确、未提交内容有备份;Git 不保证能找回从未提交且被覆盖的编辑。
5. 选择 reset、revert 还是 restore
git restore:恢复工作区或暂存区中的文件内容,主要处理文件级变化。git revert <commit>:新增一个反向提交,适合已共享/发布的历史;不会移动公共分支指针。git reset:移动当前分支所指向的提交,并可选调整暂存区和工作区;它不是通用“回退提交”入口。
git reset --soft HEAD~1 保留暂存区和工作区;默认 --mixed 会把更改留在工作区但撤出暂存区;--hard 会让暂存区和工作区匹配目标提交,并覆盖本地文件。--hard 可能永久丢弃未提交改动,只有已确认备份且明确理解影响范围时才考虑。对已推送提交,优先与团队确认并使用 git revert;不要擅自强推改写共享历史。
git status --short --branch
git log --oneline --decorate -5
git revert <commit>
不要把 HEAD^ 当成固定的“上一个版本”文字标签去盲目执行;合并提交、分支状态、未提交内容和共享历史都会改变正确选项。若误操作后发现提交消失,停止继续清理并查看 git reflog;reflog 有过期和垃圾回收边界,不是备份替代品。
6. 新手安全检查清单
- 操作前看
git status --short --branch,确认仓库和分支; - 暂存具体文件并复查
git diff --cached; - 删除或恢复文件前先检查目标路径与未提交内容;
- 对已共享提交优先创建
revert新提交,不重写他人依赖的历史; - 永不提交密码、token、私钥或生产
.env;发现已提交秘密时先轮换,再按团队安全流程处理历史和远端副本。
进一步阅读:Pro Git:撤销操作、git restore、git revert、Reset Demystified。
Live Notes
留言提交后会先进入审核,审核通过后对其他读者公开。