Appearance
Git 入门与协作:从原理到实战
更新: 6/19/2026 字数: 0 字 时长: 0 分钟

Git 是一个分布式版本控制系统,作用是记录代码的每一次改动、支持多人并行开发、并在出问题时能回退到任意历史版本。和早期的 SVN 不同,每个开发者本地都有一份完整的仓库副本,断网也能提交、查看历史、切换分支,只在需要同步时才连远程。
下面从安装配置讲到日常协作和冲突处理,每一步都给可直接敲的命令。
1. 安装与初始配置

装完 Git 后第一件事是配置身份。每次 commit 都会记下作者名和邮箱,这两个值会永久写进提交历史,所以先设好:
bash
# 验证安装
git --version
# 配置全局身份(一台机器配一次即可)
git config --global user.name "你的名字"
git config --global user.email "you@example.com"
# 设置默认分支名为 main(新仓库初始化时生效)
git config --global init.defaultBranch main
# 查看当前所有配置
git config --list--global 表示对当前用户的所有仓库生效。如果某个项目要用不同邮箱(比如公司项目和个人项目分开),在该项目目录里去掉 --global 再设一次,仓库级配置会覆盖全局配置。
2. 三个区域与基本工作流

理解 Git 的关键是看懂文件在三个区域之间的流转:
- 工作区(Working Directory):你正在编辑的文件目录。
- 暂存区(Staging Area / Index):用
git add标记好、准备进入下一次提交的改动。 - 本地仓库(Local Repository):
git commit后,改动正式存入版本历史。
之后再 git push 把本地提交同步到远程仓库。一个典型流程:
bash
# 在已有目录初始化仓库
git init
# 查看当前哪些文件被改动、处于哪个区域
git status
# 把指定文件加入暂存区
git add index.js
# 或加入所有改动
git add .
# 提交到本地仓库,-m 写清这次改了什么
git commit -m "修复登录接口空指针问题"
# 关联远程仓库(首次)
git remote add origin https://github.com/you/repo.git
# 推送到远程的 main 分支,-u 记住关联,之后直接 git push 即可
git push -u origin main写 commit message 时说清"做了什么、为什么",别写"update"、"fix bug"这种事后看不懂的内容。一次 commit 只做一件事,方便日后定位和回退。
.gitignore 文件用来排除不该进版本库的内容,前端项目常见的是:
node_modules/
dist/
.env
*.log
.DS_Store3. 分支与合并协作

分支是 Git 协作的核心。主分支(main)保持随时可发布的稳定状态,每个人开发新功能时从 main 拉一条独立分支,互不干扰,做完再合回来。
bash
# 创建并切换到新分支
git checkout -b feature/user-profile
# 新写法(Git 2.23+)
git switch -c feature/user-profile
# 查看所有分支,当前分支带 *
git branch
# 在功能分支上正常 add / commit
git add .
git commit -m "完成用户资料页"
# 推送功能分支到远程
git push -u origin feature/user-profile功能做完后切回 main,把功能分支合进来:
bash
git switch main
git pull # 先拉取别人的最新改动
git merge feature/user-profile分支命名约定俗成:feature/xxx(新功能)、fix/xxx(修 bug)、hotfix/xxx(线上紧急修复)。一眼能看出分支用途,团队协作时少很多沟通成本。
4. 远程协作:clone、pull、push

加入一个已有项目时,从远程克隆一份完整副本:
bash
# 克隆远程仓库到本地(含全部历史和分支)
git clone https://github.com/team/project.git
cd projectclone 会自动把远程仓库命名为 origin 并关联好。日常协作中两个动作交替进行:pull 拉取队友的更新,push 推送自己的提交。
bash
# 拉取远程最新提交并合并到本地当前分支
git pull origin main
# 推送本地提交到远程
git push origin feature/user-profile养成 写代码前先 pull 的习惯。直接在别人改动的旧代码上提交,push 时大概率被拒绝,还容易制造本可避免的冲突。git pull 实际是 git fetch(下载远程更新)加 git merge(合并到当前分支)两步的组合。
提交 PR(Pull Request / Merge Request)是团队协作的标准入口:把功能分支推到远程后,在 GitHub/GitLab 上发起 PR,由队友 review 代码、跑 CI 检查,通过后再合入 main。这样 main 上的每一行代码都经过至少一个人把关。
5. 解决合并冲突

当两个人改了同一个文件的同一处,Git 没法自动判断该留谁的,就会报冲突。这时文件里会出现冲突标记:
js
const timeout = 3000; // 我的修改处理步骤很直接:
git status看哪些文件冲突了;- 打开文件,删掉
<<<<<<<、=======、>>>>>>>这些标记,手动决定保留哪一份(或两份都改成正确的合并结果); - 改好后
git add标记冲突已解决; git commit完成合并。
bash
git status # 查看冲突文件
# 手动编辑解决冲突...
git add config.js
git commit # 完成合并提交冲突不可怕,关键是改完一定要确认逻辑正确,别为了消掉标记随便删一边的代码。VS Code、JetBrains 系列都内置了冲突合并面板,能直观地点选"采用当前更改 / 采用传入更改 / 保留双方"。
6. 常用命令速查
| 场景 | 命令 |
|---|---|
| 查看状态 | git status |
| 查看提交历史 | git log --oneline --graph |
| 撤销工作区改动 | git restore 文件名 |
| 撤销暂存(取消 add) | git restore --staged 文件名 |
| 修改最后一次提交 | git commit --amend |
| 暂存当前改动(切分支前) | git stash / 恢复 git stash pop |
| 回退到某次提交 | git reset --hard <commit-id> |
| 查看某文件每行作者 | git blame 文件名 |
| 创建+切换分支 | git switch -c 分支名 |
| 删除本地分支 | git branch -d 分支名 |
git reset --hard 会丢弃未提交的改动,用之前确认好。需要"撤销已 push 的提交"且不想改写历史时,用 git revert <commit-id> 更安全——它会新建一个反向提交,而不是删历史。
协作中的几个实用习惯
- 小步提交:一个 commit 只解决一个问题,历史清晰,出问题好定位。
- 写代码前先 pull:减少冲突,始终基于最新代码开发。
- 功能分支开发:不直接在
main上改,所有改动经 PR 评审合入。 - commit message 写清楚:说"为什么改",比"改了什么"更有价值。
- 善用
.gitignore:别把node_modules、构建产物、密钥文件提交上去。