程序员的附加技能:Git 使用从入门到精通
Git 核心概念与工作流摘要 Git 是一个分布式版本控制系统,核心概念包括仓库、提交、分支和暂存区。标准工作流程为:修改→暂存→提交→推送。分支管理支持并行开发,推荐使用功能分支策略。远程协作通过 fetch/pull/push 实现,需注意解决冲突。高级功能包括贮藏变更、二分定位问题、历史重写等。撤销操作可恢复文件到不同状态。安装配置后,建议设置用户信息和实用别名。遵循约定式提交规范,保持清晰
·

文章目录

1. Git 基础概念
核心概念
- 仓库(Repository):项目的历史记录和元数据存储
- 提交(Commit):项目的快照,包含唯一 SHA-1 哈希值
- 分支(Branch):指向提交的可移动指针
- HEAD:当前工作位置的指针
- 暂存区(Staging Area):准备提交的中间区域
文件状态生命周期
2. 安装与配置
安装 Git
# Ubuntu/Debian
sudo apt-get install git
# CentOS/RHEL
sudo yum install git
# macOS (Homebrew)
brew install git
# Windows
# 下载安装包:https://git-scm.com/download/win
基础配置
# 设置用户名和邮箱(全局)
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
# 设置默认编辑器
git config --global core.editor "code --wait" # VS Code
# 查看配置
git config --list
# 设置别名
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
重要配置文件位置
- 系统级:
/etc/gitconfig - 用户级:
~/.gitconfig - 仓库级:
.git/config
3. 仓库操作
初始化仓库
# 新建仓库
mkdir project && cd project
git init
# 克隆现有仓库
git clone https://github.com/user/repo.git
git clone --depth 1 https://github.com/user/repo.git # 浅克隆(仅最新提交)
仓库结构
.git/
├── HEAD # 当前分支指针
├── config # 仓库配置
├── objects/ # 数据对象
├── refs/ # 分支和标签指针
│ ├── heads/ # 本地分支
│ └── tags/ # 标签
└── index # 暂存区文件
4. 基础工作流
标准工作流程
# 1. 修改文件
echo "Hello World" > file.txt
# 2. 查看状态
git status
# 3. 添加到暂存区
git add file.txt
git add . # 添加所有变更
git add -p # 交互式添加(部分添加)
# 4. 提交
git commit -m "Add initial file"
git commit -am "修改说明" # 跳过add直接提交已跟踪文件
# 5. 查看历史
git log
git log --oneline --graph --all # 图形化查看
提交规范示例
git commit -m "feat: 添加用户登录功能
- 实现JWT认证
- 添加登录API端点
- 完善错误处理
Close #123"
推荐使用约定式提交规范:
- feat: 新功能
- fix: bug修复
- docs: 文档变更
- style: 格式变更
- refactor: 重构代码
- test: 测试变更
- chore: 构建或辅助工具变更
5. 分支管理
分支操作
# 创建分支
git branch feature-login
git checkout -b feature-login # 创建并切换
# 切换分支
git checkout main
git switch main # Git 2.23+ 推荐方式
# 合并分支
git checkout main
git merge feature-login
# 删除分支
git branch -d feature-login # 安全删除
git branch -D feature-login # 强制删除未合并分支
# 重命名分支
git branch -m old-name new-name
分支策略示例
变基(Rebase)与合并(Merge)
# 合并(保留完整历史)
git checkout main
git merge feature
# 变基(线性历史)
git checkout feature
git rebase main
# 交互式变基(修改历史)
git rebase -i HEAD~3 # 修改最近3个提交
注意事项:
- 不要在公共分支上变基(会重写历史)
- 变基后需要强制推送:
git push --force-with-lease- 团队协作时优先使用合并
6. 远程协作
远程仓库操作
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
# 查看远程
git remote -v
# 重命名远程
git remote rename origin upstream
# 移除远程
git remote remove origin
# 拉取更新
git fetch origin # 仅获取元数据
git pull origin main # fetch + merge
git pull --rebase # fetch + rebase(推荐)
# 推送分支
git push origin main
git push -u origin main # 设置上游跟踪
# 删除远程分支
git push origin --delete feature-old
协作工作流
解决冲突
当多人修改同一文件时:
# 1. 拉取最新代码(会提示冲突)
git pull origin main
# 2. 打开冲突文件
<<<<<<< HEAD
本地修改内容
=======
远程修改内容
>>>>>>> commit-hash
# 3. 手动解决冲突后
git add resolved-file.txt
git commit -m "解决合并冲突"
git push
7. 高级操作
贮藏变更
# 临时保存未提交的修改
git stash
# 查看贮藏列表
git stash list
# 应用贮藏
git stash apply stash@{0}
# 创建新分支并应用贮藏
git stash branch new-feature
# 删除贮藏
git stash drop stash@{0}
二分查找(定位问题提交)
git bisect start
git bisect bad # 当前版本有问题
git bisect good v1.0 # v1.0版本正常
# 测试当前版本后标记结果
git bisect good # 如果当前版本正常
git bisect bad # 如果当前版本有问题
# 结束后重置
git bisect reset
重写历史
# 修改最近一次提交
git commit --amend
# 交互式重写多个提交
git rebase -i HEAD~3
# 选项说明:
# pick: 使用提交
# reword: 修改提交信息
# edit: 修改提交内容
# squash: 合并到前一个提交
# fixup: 合并并丢弃提交信息
# drop: 删除提交
大文件存储(LFS)
# 安装Git LFS
git lfs install
# 跟踪大文件类型
git lfs track "*.psd"
git lfs track "*.zip"
# 查看跟踪的文件
git lfs ls-files
8. 撤销与恢复
撤销工作区修改
# 放弃单个文件修改
git checkout -- filename.txt
# 放弃所有修改
git restore . # Git 2.23+
git checkout -- .
撤销暂存区文件
git reset HEAD filename.txt
git restore --staged filename.txt # Git 2.23+
撤销提交
# 撤销上一次提交(保留修改)
git reset --soft HEAD~1
# 完全撤销提交(丢弃修改)
git reset --hard HEAD~1
# 恢复误删的提交
git reflog # 查找提交哈希
git reset --hard <commit-hash>
恢复删除的文件
# 查看删除历史
git log --diff-filter=D -- path/to/file
# 恢复文件
git checkout <commit-hash>^ -- path/to/file
9. 子模块与工作树
子模块
# 添加子模块
git submodule add https://github.com/user/lib.git
# 克隆包含子模块的项目
git clone --recurse-submodules https://github.com/user/project.git
# 更新子模块
git submodule update --init --recursive
多工作树
# 创建工作树
git worktree add ../hotfix hotfix-branch
# 列出工作树
git worktree list
# 移除工作树
git worktree remove hotfix-branch
10. Git 钩子
常用钩子示例
# .git/hooks/pre-commit
#!/bin/sh
# 运行代码检查
npm run lint
# .git/hooks/pre-push
#!/bin/sh
# 运行测试
npm test
客户端钩子
pre-commit: 提交前运行prepare-commit-msg: 准备提交信息commit-msg: 验证提交信息post-commit: 提交完成后
服务端钩子
pre-receive: 处理推送前update: 按分支处理post-receive: 推送完成后
最佳实践:使用 Husky 管理 Git 钩子
11. 最佳实践与注意事项
提交规范
- 提交信息清晰描述变更内容
- 遵循团队约定的提交规范
- 每个提交保持单一责任原则
- 避免提交大文件(使用 LFS)
- 不要提交敏感信息(密码、密钥)
分支管理策略
- 主分支:
main/master(稳定版) - 开发分支:
develop(集成环境) - 功能分支:
feature/*(新功能开发) - 修复分支:
hotfix/*(紧急修复) - 发布分支:
release/*(版本准备)
协作注意事项
- 频繁拉取上游变更
- 推送前在本地运行测试
- 使用
--force-with-lease代替--force - 定期清理过时分支
- 使用 Pull Request/Merge Request 进行代码审查
性能优化
# 仓库维护
git gc --auto
# 清理历史大文件(使用 BFG)
bfg --delete-files '*.zip' my-repo.git
# 浅克隆大型仓库
git clone --depth 1 https://github.com/large-repo.git
12. 常见问题解决方案
1. 提交了错误文件
# 保留文件但从Git历史中移除
git filter-branch --tree-filter 'rm -f sensitive.txt' HEAD
# 更高效的工具
git filter-repo --invert-paths --path sensitive.txt
2. 忘记创建分支直接提交到 main
# 1. 创建新分支保存当前状态
git branch temp-branch
# 2. 重置main分支
git checkout main
git reset --hard origin/main
# 3. 切换到新分支继续工作
git checkout temp-branch
3. 合并后需要撤销
# 撤销合并提交
git revert -m 1 <merge-commit-hash>
4. 证书问题
# 忽略SSL验证(临时解决)
git config --global http.sslVerify false
# 永久解决方案:更新CA证书
sudo apt-get install ca-certificates
5. 中文文件名乱码
# 显示UTF-8文件名
git config --global core.quotepath false
Git 命令速查表
| 类别 | 命令 | 描述 |
|---|---|---|
| 基础 | git init |
初始化仓库 |
git clone <url> |
克隆仓库 | |
git status |
查看状态 | |
| 提交 | git add <file> |
添加文件到暂存区 |
git commit -m "msg" |
提交变更 | |
git commit --amend |
修改上次提交 | |
| 分支 | git branch |
列出分支 |
git checkout <branch> |
切换分支 | |
git merge <branch> |
合并分支 | |
| 远程 | git fetch |
获取远程更新 |
git pull |
拉取并合并 | |
git push |
推送到远程 | |
| 撤销 | git restore <file> |
撤销工作区修改 |
git reset <commit> |
重置到指定提交 | |
git revert <commit> |
创建撤销提交 | |
| 日志 | git log |
查看提交历史 |
git diff |
查看差异 | |
| 高级 | git stash |
暂存变更 |
git rebase |
变基操作 | |
git bisect |
二分查找问题 |

提示:使用
git help <command>查看命令详细帮助
实践是最好的学习方式,多在实际项目中应用这些命令,逐渐形成自己的工作流。
更多推荐

所有评论(0)