基于真实开发场景整理的 Git 完整教程,涵盖日常操作、分支管理、远程协作和常见问题排查。
Git 使用教程:从零到团队协作
基于真实开发场景整理,涵盖日常操作、分支管理、远程协作和常见问题排查。
一、Git 是什么?
Git 是一个分布式版本控制系统,用于追踪文件变更、协同开发、代码回滚。
核心概念
| 概念 |
说明 |
| 工作区(Working Directory) |
你当前编辑的文件目录 |
| 暂存区(Staging Area) |
准备提交的文件列表 |
| 本地仓库(Local Repository) |
已提交的历史记录 |
| 远程仓库(Remote Repository) |
GitHub/GitLab 上的备份仓库 |
工作流程
1
|
工作区 → git add → 暂存区 → git commit → 本地仓库 → git push → 远程仓库
|
二、安装与配置
2.1 安装
1
2
3
4
5
6
7
8
9
|
# macOS
brew install git
# Linux
sudo apt install git # Debian/Ubuntu
sudo yum install git # CentOS/RHEL
# Windows
# 下载 https://git-scm.com/download/win
|
2.2 基础配置
1
2
3
4
5
6
7
8
9
|
# 设置用户名和邮箱(提交时显示)
git config --global user.name "你的名字"
git config --global user.email "your@email.com"
# 设置默认编辑器
git config --global core.editor "vim"
# 查看配置
git config --list --global
|
2.3 推荐配置
1
2
3
4
5
6
7
8
9
10
11
12
|
# 启用彩色输出
git config --global color.ui auto
# 设置别名(缩短命令)
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --graph --oneline --decorate --all"
# 启用自动合并
git config --global merge.ff false
|
三、日常操作
3.1 初始化仓库
1
2
3
4
5
6
7
|
# 创建新项目
mkdir my-project && cd my-project
git init
# 克隆已有项目
git clone https://github.com/user/repo.git
git clone git@github.com:user/repo.git # SSH 方式(推荐)
|
3.2 查看状态
1
2
3
4
5
6
7
8
|
# 查看当前状态(哪些文件被修改/新增/删除)
git status
# 查看简短状态
git status -s
# M file.txt # 已修改未暂存
# ?? new.txt # 未跟踪
# A added.txt # 已暂存待提交
|
3.3 添加与提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 添加单个文件到暂存区
git add file.txt
# 添加所有修改
git add .
# 添加指定类型的文件
git add *.py
# 撤销暂存(从暂存区移回工作区)
git reset HEAD file.txt
# 提交到本地仓库
git commit -m "feat: 添加用户登录功能"
# 提交并自动添加所有修改(快捷方式)
git commit -am "fix: 修复登录bug"
# 修改上次提交(不改变提交时间)
git commit --amend -m "新的提交信息"
|
3.4 查看历史
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 查看提交历史
git log
# 查看简短日志
git log --oneline
# 查看图形化历史
git log --graph --oneline --all
# 查看某次提交的详情
git show <commit-hash>
# 查看两个版本之间的差异
git diff HEAD~1
git diff main..feature-branch
|
3.5 撤销修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 撤销工作区的修改(恢复到最后一次提交的状态)
git checkout -- file.txt # 旧写法
git restore file.txt # 新写法(推荐)
# 撤销暂存区的文件
git restore --staged file.txt
# 回退到某个版本(保留历史记录)
git revert <commit-hash>
# 回退到某个版本(丢弃历史记录,慎用!)
git reset --hard <commit-hash>
# 回退到上一个版本
git reset --hard HEAD~1
|
四、分支管理
4.1 分支操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# 查看所有分支
git branch
# 查看远程分支
git branch -r
# 查看所有分支(含远程)
git branch -a
# 创建新分支
git branch feature-login
# 创建并切换到新分支
git checkout -b feature-login
# 切换到已有分支
git checkout main
# 删除本地分支
git branch -d feature-login
# 强制删除(即使有未合并的更改)
git branch -D feature-login
|
4.2 合并分支
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 切换到目标分支
git checkout main
# 合并另一个分支
git merge feature-login
# 快进式合并(无冲突时自动快进)
git merge --ff feature-login
# 禁止快进(保留合并记录)
git merge --no-ff feature-login
# 取消合并(出现冲突时想放弃)
git merge --abort
|
4.3 解决冲突
当两个分支修改了同一文件的同一行时,会产生冲突:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 1. 查看冲突文件
git status
# 2. 打开冲突文件,找到冲突标记
<<<<<<< HEAD
主分支的代码
=======
feature 分支的代码
>>>>>>> feature-login
# 3. 手动编辑,保留需要的内容,删除冲突标记
# 4. 标记冲突已解决
git add resolved-file.txt
# 5. 完成合并
git commit -m "merge: 解决登录功能冲突"
|
4.4 常用分支策略
1
2
3
4
5
6
|
main (生产环境)
├── develop (开发分支)
│ ├── feature/login
│ ├── feature/dashboard
│ └── bugfix/header-align
└── release/v1.0
|
五、远程仓库协作
5.1 连接远程仓库
1
2
3
4
5
6
7
8
9
10
11
|
# 查看远程仓库
git remote -v
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
# 修改远程地址
git remote set-url origin https://github.com/user/new-repo.git
# 删除远程仓库
git remote remove origin
|
5.2 推送与拉取
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 推送到远程(首次推送需要 -u)
git push -u origin main
# 推送到远程(之后可简写)
git push origin main
# 拉取远程更新
git pull origin main
# 拉取并自动合并
git pull --rebase origin main
# 获取远程更新但不合并
git fetch origin
|
5.3 标签管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 列出标签
git tag
# 创建标签
git tag v1.0.0
# 创建带注释的标签
git tag -a v1.0.0 -m "发布版本 1.0.0"
# 推送标签到远程
git push origin v1.0.0
# 推送所有标签
git push origin --tags
# 删除标签
git tag -d v1.0.0
git push origin --delete v1.0.0
|
六、高级技巧
6.1 Stash(暂存工作进度)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 保存当前工作进度
git stash save "正在调试登录功能"
# 查看暂存列表
git stash list
# 恢复最近的暂存
git stash pop
# 恢复指定的暂存
git stash apply stash@{1}
# 删除暂存
git stash drop stash@{0}
# 清空所有暂存
git stash clear
|
6.2 Cherry-pick(挑选提交)
1
2
3
4
5
6
7
8
|
# 将某个提交应用到当前分支
git cherry-pick <commit-hash>
# 挑选多个提交
git cherry-pick <hash1> <hash2>
# 挑选提交范围
git cherry-pick <hash1>^..<hash2>
|
6.3 Rebase(变基)
1
2
3
4
5
6
7
8
9
10
11
12
|
# 将当前分支的提交变基到目标分支
git rebase main
# 交互式变基(编辑提交历史)
git rebase -i HEAD~3
# 变基时遇到冲突,解决后继续
git add resolved-file.txt
git rebase --continue
# 中止变基
git rebase --abort
|
6.4 .gitignore(忽略文件)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# Python
__pycache__/
*.pyc
*.pyo
venv/
.env
# IDE
.vscode/
.idea/
*.swp
*.swo
# 操作系统
.DS_Store
Thumbs.db
# 构建产物
dist/
build/
*.egg-info/
# 敏感文件
config.local.yaml
secrets.json
|
七、SSH 密钥配置
7.1 生成密钥
1
2
3
4
5
6
7
8
9
|
# 检查是否已有密钥
ls ~/.ssh/id_rsa.pub
# 生成新密钥(推荐 Ed25519)
ssh-keygen -t ed25519 -C "your@email.com"
# 如果有密码保护,启动 ssh-agent
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
|
7.2 添加到 GitHub/GitLab
1
2
3
4
5
|
# 复制公钥
cat ~/.ssh/id_ed25519.pub
# 粘贴到 GitHub: Settings → SSH and GPG keys → New SSH key
# 粘贴到 GitLab: Settings → SSH Keys
|
7.3 测试连接
1
2
3
4
5
|
# GitHub
ssh -T git@github.com
# GitLab
ssh -T git@gitlab.com
|
八、常见问题排查
8.1 忘记添加文件
1
2
3
|
# 提交后发现漏了文件
git add missed-file.txt
git commit --amend --no-edit
|
8.2 误删文件恢复
1
2
3
4
5
|
# 从最后一次提交恢复
git checkout -- deleted-file.txt
# 从指定版本恢复
git checkout <commit-hash> -- file.txt
|
8.3 远程和本地不同步
1
2
3
4
5
6
|
# 强制同步(丢弃本地所有修改)
git fetch origin
git reset --hard origin/main
# 保留本地修改(尝试自动合并)
git pull --rebase origin main
|
8.4 查看谁修改了某行代码
1
2
3
4
5
|
# 查看文件每行的最后修改者
git blame file.txt
# 查看特定行的修改历史
git blame -L 10,20 file.txt
|
8.5 清理未跟踪的文件
1
2
3
4
5
6
7
8
|
# 预览将被删除的文件
git clean -n
# 删除未跟踪的文件
git clean -f
# 删除未跟踪的目录
git clean -fd
|
九、Git 命令速查表
| 操作 |
命令 |
| 初始化仓库 |
git init |
| 克隆仓库 |
git clone <url> |
| 查看状态 |
git status |
| 添加文件 |
git add <file> |
| 提交更改 |
git commit -m "msg" |
| 查看历史 |
git log --oneline |
| 创建分支 |
git branch <name> |
| 切换分支 |
git checkout <name> |
| 合并分支 |
git merge <branch> |
| 推送远程 |
git push origin <branch> |
| 拉取远程 |
git pull origin <branch> |
| 添加远程 |
git remote add origin <url> |
| 撤销修改 |
git restore <file> |
| 回退版本 |
git reset --hard <commit> |
| 暂存进度 |
git stash save "msg" |
| 恢复暂存 |
git stash pop |
| 挑选提交 |
git cherry-pick <hash> |
| 查看差异 |
git diff |
| 打标签 |
git tag -a v1.0 -m "msg" |
| 清理文件 |
git clean -fd |
十、最佳实践
- 小步提交 — 每次提交只做一件事,方便回滚
- 清晰的提交信息 — 格式:
类型: 描述,如 feat: 添加搜索功能
- 频繁推送 — 每天至少推一次,避免数据丢失
- 先拉后做 — 开始工作前先
git pull 确保最新
- 使用分支 — 新功能在独立分支开发,合并前测试
- 定期备份 — 远程仓库就是备份,不要只依赖本地
- 善用 .gitignore — 不提交临时文件、配置文件、构建产物
附录:常用提交类型
| 类型 |
说明 |
feat |
新功能 |
fix |
修复 bug |
docs |
文档变更 |
style |
代码格式(不影响逻辑) |
refactor |
重构(非新功能/非修复) |
test |
测试相关 |
chore |
构建过程或辅助工具变动 |
perf |
性能优化 |