Skip to content

Git 入门与协作:从原理到实战

更新: 6/19/2026 字数: 0 字 时长: 0 分钟

Git入门与协作封面

Git 是一个分布式版本控制系统,作用是记录代码的每一次改动、支持多人并行开发、并在出问题时能回退到任意历史版本。和早期的 SVN 不同,每个开发者本地都有一份完整的仓库副本,断网也能提交、查看历史、切换分支,只在需要同步时才连远程。

下面从安装配置讲到日常协作和冲突处理,每一步都给可直接敲的命令。

1. 安装与初始配置

Git安装与初始配置

装完 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三个区域与文件流转

理解 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_Store

3. 分支与合并协作

分支与合并协作流程

分支是 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

Git远程协作流程

加入一个已有项目时,从远程克隆一份完整副本:

bash
# 克隆远程仓库到本地(含全部历史和分支)
git clone https://github.com/team/project.git
cd project

clone 会自动把远程仓库命名为 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;   // 我的修改

处理步骤很直接:

  1. git status 看哪些文件冲突了;
  2. 打开文件,删掉 <<<<<<<=======>>>>>>> 这些标记,手动决定保留哪一份(或两份都改成正确的合并结果);
  3. 改好后 git add 标记冲突已解决;
  4. 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、构建产物、密钥文件提交上去。