
Git 是分布式版本控制系统:每个人的电脑上都有一份完整的历史记录,离线也能提交,最后再和远端同步。这篇按”装好 → 日常 → 分支 → 协作 → 救援”的顺序把常用操作串一遍。
安装与首次配置
Windows 直接装 Git for Windows,macOS 用 brew install git。装完先配置身份,这两行会写进每一个提交:
git config --global user.name "你的名字"git config --global user.email "you@example.com"推荐顺手设置的几项:
git config --global init.defaultBranch main # 新仓库默认 main 分支git config --global core.autocrlf input # Windows 建议 true,避免换行符混乱git config --global core.editor "code --wait" # 用 VS Code 写提交信息日常三板斧
绝大多数时间你只需要这五个命令:
git status # 看当前状态:改了什么、暂存了什么git add 文件名 # 把改动放进暂存区;git add . 表示全部git commit -m "fix: 修复首页翻页" # 提交暂存区的内容git log --oneline # 查看精简历史git diff # 看还没暂存的改动;git diff --staged 看已暂存的提交信息建议遵循约定式提交(Conventional Commits):type(scope): subject,常用的 type 有 feat(新功能)、fix(修复)、docs(文档)、refactor(重构)、chore(杂务)。半年后翻历史时,你会感谢当初写清楚的你。
远程仓库
git clone https://github.com/user/repo.git # 克隆远端仓库git remote -v # 查看远端地址git pull # 拉取并合并远端更新git push # 推送本地提交git push -u origin main # 首次推送并建立跟踪关系pull 等于 fetch + merge:先下载远端新提交,再合进当前分支。如果只想下载不合并(先看看别人改了什么),单独用 git fetch。
分支与合并
分支是指向某个提交的可移动指针,创建和切换都是瞬间完成的:
git branch # 列出本地分支git switch -c feat/comments # 创建并切换到新分支(-c 表示创建)git switch main # 切回主分支git merge feat/comments # 把功能分支合入当前分支git branch -d feat/comments # 合并后删除分支合并时如果两个人改了同一处代码,会产生冲突。文件里会出现这样的标记:
<<<<<<< HEAD你这边的改动=======对方那边的改动>>>>>>> feat/comments手动编辑成想要的样子,删掉标记,然后 git add 该文件并 git commit,冲突就解决了。
撤销操作:先想清楚再动手
| 场景 | 命令 | 说明 |
|---|---|---|
| 丢弃工作区改动 | git restore 文件名 | 危险,改动无法找回 |
| 把文件移出暂存区 | git restore --staged 文件名 | 只取消暂存,不丢内容 |
| 修改最后一次提交 | git commit --amend | 可补文件、改提交信息 |
| 回退到某次提交 | git reset --soft HEAD~1 | 保留改动在暂存区 |
| 撤销某次提交 | git revert <hash> | 生成反向提交,安全 |
.gitignore:让仓库只装该装的
在仓库根目录建 .gitignore 文件,一行一个规则:
node_modules/ # 依赖,pnpm install 能装回来dist/ # 构建产物.env # 密钥和环境变量,绝对不能进仓库.DS_Store # 系统杂碎已经被跟踪的文件不受 .gitignore 影响,需要先 git rm --cached 文件名 取消跟踪。
一张速查表
工作区 --add--> 暂存区 --commit--> 本地仓库 --push--> 远端 git restore <---- git reset <---- git diff git diff --staged记住数据在这四个区域之间的流动方向,大部分疑问就能自己想明白。剩下的交给 git help <命令>——Git 的官方手册就藏在这个命令背后。
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
最后更新于 ,距今已过 27 天
部分内容可能已过时