git 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
git——虽不在 20 大命令族速查表里,但是开发者天天用的核心命令,值得单篇。
git 是分布式版本控制系统(VCS,记录文件变更历史、支持多人协作的工具)。"分布式"意味着每个开发者本地都有完整仓库历史,不依赖中央服务器也能提交。它回答:"代码怎么一步步变成现在这样?谁改的、为什么改?"
一、基本工作流
git clone <url> # 拉取远程仓库到本地
git status # 看当前改动(最常用)
git add file.py # 把改动加入暂存区
git commit -m "fix: 修复空指针" # 提交到本地仓库
git push origin master # 推到远程
git pull # 拉取并合并远程变更git 有三个区:工作区(你改的文件)、暂存区(stage,待提交快照)、仓库(已提交历史)。
add是把工作区改动"标记进暂存",commit才真正入库。git status是任何时候的第一反应——看清哪些改了、哪些已暂存。本项目就靠git push经 ssh 隧道 推到 GitHub。
二、分支:git 的核心
git branch # 看本地分支
git branch feat-x # 建分支
git checkout feat-x # 切换(老写法)
git switch feat-x # 切换(新写法,更清晰)
git merge feat-x # 把 feat-x 合进当前分支
git rebase master # 把当前分支变基到 master 之上分支是 git 的强项,轻量到可以随便建。开发新功能开个分支、测完再合并回主分支,是标准协作模式。
merge保留分叉历史、rebase把提交"挪"到目标之后形成直线历史——本站之前同步远程时就用了rebase把本地提交接到origin/master之上(见 ssh 隧道部署 实战)。
三、查看历史与差异
git log --oneline -10 # 近 10 条精简历史
git log -p file.py # 看某文件的改动详情
git diff # 工作区 vs 暂存区
git diff --cached # 暂存区 vs 仓库
git diff master..feat-x # 两分支差异
log -p带出每次提交的 diff,追溯"这行为啥改成这样"最直观。diff 配合status看清"改了什么还没提交"。善用git log+git diff,比凭记忆靠谱。
四、撤销与回退
git checkout -- file.py # 丢弃工作区对该文件的改动
git restore file.py # 新写法,等价上面
git reset HEAD file.py # 把文件移出暂存区(改动保留)
git commit --amend # 修补上一次提交(改 message 或补文件)
git revert <commit> # 生成一个"反向"提交来撤销(安全,不改历史)撤销要分清层级:
restore/checkout --丢工作区改动、reset HEAD取消暂存、commit --amend改最新提交、revert安全地撤销历史提交(产生新提交、不改写已有历史,适合已推送的提交)。已 push 的提交别用reset --hard或rebase改写历史再强推——会搞乱协作,除非像本站那样确认无他人依赖才force-with-lease。
五、远程与跟踪
git remote -v # 看远程地址
git fetch origin # 拉取远程引用(不合并)
git pull --rebase # 拉取并变基(比 merge 历史更干净)
git push -u origin feat-x # 推并设上游跟踪
fetch只更新远程引用不碰工作区,安全;pull=fetch+merge。推荐pull --rebase让本地提交接到远程之后,避免一堆无意义的 merge commit。-u设好上游后,之后直接git push/git pull不用再写分支名。
六、冲突解决
git pull # 提示冲突
git status # 看哪些文件冲突(both modified)
# 手动编辑文件,保留正确内容,删掉 <<<<<<< ======= >>>>>>> 标记
git add resolved_file
git commit # 完成合并冲突不可怕:git 会把两边改动都标进文件(
<<<<<<<你的、>>>>>>>对方的,中间=======分隔),你决定保留哪段、删掉标记、add再commit即可。复杂冲突可用git mergetool调起图形工具。关键是改完务必git diff确认没把标记残留进去。
一句话总结
git = 分布式版本控制:三区(工作区/暂存区/仓库)靠 add→commit→push 流转;分支轻量、switch 切换、merge 保分叉/rebase 求直线;status/log -p/diff 看清改动、restore/reset/revert 分层撤销(已推送别硬改历史);冲突手动解标记再提交。日常开发协作的基石,本站即经 ssh 隧道 推送到 GitHub。