一、Git 基础概念
1. 版本控制系统分类
- 本地版本控制:如RCS,仅在本机保存历史版本
- 集中式版本控制:如SVN,单一中央服务器管理代码
- 分布式版本控制:如Git,每个开发者都有完整的仓库副本
2. Git 核心概念
概念 | 说明 |
---|---|
仓库(Repository) | 项目所有版本数据的存储位置 |
工作目录(Working Directory) | 项目文件的当前状态 |
暂存区(Staging Area) | 准备提交的文件列表 |
提交(Commit) | 永久的项目快照 |
分支(Branch) | 独立开发线 |
标签(Tag) | 特定提交的标记 |
3. Git 工作流程
工作目录 → git add → 暂存区 → git commit → 本地仓库 → git push → 远程仓库
二、Git 安装与配置
1. 安装 Git
-
Windows :下载 Git for Windows
-
macOS :
brew install git
或从官网下载 -
Linux :
bash# Ubuntu/Debian sudo apt install git # CentOS/RHEL sudo yum install git
2. 初始配置
bash
# 设置用户名
git config --global user.name "Your Name"
# 设置邮箱
git config --global user.email "[email protected]"
# 查看配置
git config --list
# 设置默认编辑器(可选)
git config --global core.editor "code --wait" # VS Code
三、基础操作
1. 创建仓库
bash
# 初始化新仓库
git init
# 克隆现有仓库
git clone https://github.com/user/repo.git
git clone https://github.com/user/repo.git myfolder # 指定目录名
2. 基本工作流
bash
# 检查文件状态
git status
# 添加文件到暂存区
git add filename.txt # 添加特定文件
git add . # 添加所有更改
git add *.js # 添加所有js文件
# 提交更改
git commit -m "描述信息"
# 查看提交历史
git log
git log --oneline # 简洁版
git log --graph --all # 图形化显示分支
3. 文件操作
bash
# 删除文件
git rm filename.txt
# 重命名/移动文件
git mv oldname.txt newname.txt
# 忽略文件(.gitignore)
echo "node_modules/" >> .gitignore
echo "*.log" >> .gitignore
四、分支管理
1. 基础分支操作
bash
# 查看分支
git branch # 本地分支
git branch -a # 所有分支(包括远程)
# 创建分支
git branch new-feature
git checkout -b new-feature # 创建并切换
# 切换分支
git checkout main
# 合并分支
git checkout main
git merge new-feature
# 删除分支
git branch -d new-feature # 安全删除
git branch -D new-feature # 强制删除
2. 分支策略
- 主分支(main/master):稳定版本
- 开发分支(develop):集成最新开发成果
- 功能分支(feature/xxx):开发新功能
- 发布分支(release/xxx):准备发布版本
- 热修复分支(hotfix/xxx):紧急修复生产问题
3. 分支合并策略
bash
# 普通合并(创建合并提交)
git merge feature-branch
# 变基合并(线性历史)
git checkout feature-branch
git rebase main
git checkout main
git merge feature-branch
# 解决冲突后继续
git add conflicted-file.txt
git rebase --continue
五、远程仓库
1. 远程操作基础
bash
# 查看远程仓库
git remote -v
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
# 推送到远程
git push -u origin main # 首次推送
git push # 后续推送
# 从远程拉取
git pull origin main # 拉取并合并
git fetch origin # 仅获取不合并
2. 多人协作流程
bash
# 1. 获取最新代码
git fetch origin
# 2. 基于远程分支创建本地分支
git checkout -b feature-x origin/feature-x
# 3. 开发完成后推送
git push origin feature-x
# 4. 创建Pull Request/Merge Request
# (在GitHub/GitLab界面上操作)
# 5. 同步主分支
git checkout main
git pull origin main
3. 远程分支管理
bash
# 跟踪远程分支
git checkout --track origin/feature-y
# 删除远程分支
git push origin --delete old-branch
# 更新远程分支列表
git remote update origin --prune
六、高级操作
1. 撤销更改
bash
# 撤销工作目录修改
git checkout -- filename.txt
# 撤销暂存区文件
git reset HEAD filename.txt
# 修改最后一次提交
git commit --amend
# 回退到特定提交
git reset --hard commit_hash # 彻底回退
git reset --soft commit_hash # 保留更改到暂存区
git revert commit_hash # 创建反向提交
2. 储藏更改
bash
# 储藏当前工作
git stash
git stash save "描述信息"
# 查看储藏列表
git stash list
# 恢复储藏
git stash apply stash@{0}
git stash pop # 恢复并删除
# 删除储藏
git stash drop stash@{0}
3. 标签管理
bash
# 创建标签
git tag v1.0.0
git tag -a v1.0.1 -m "Release version 1.0.1"
# 推送标签
git push origin v1.0.0
git push origin --tags # 推送所有标签
# 删除标签
git tag -d v0.9.0
git push origin --delete v0.9.0
七、Git 内部原理
1. Git 对象模型
- Blob:文件内容
- Tree:目录结构
- Commit:项目快照
- Tag:特定提交的引用
2. 引用与HEAD
bash
# 查看引用
cat .git/HEAD
cat .git/refs/heads/main
# 查看对象内容
git cat-file -p commit_hash
3. 底层命令示例
bash
# 创建blob对象
echo "content" | git hash-object -w --stdin
# 创建tree对象
git update-index --add --cacheinfo 100644 blob_hash filename.txt
git write-tree
八、Git 工作流
1. 集中式工作流
- 类似SVN,所有开发者直接向主分支提交
- 适合小型团队
2. 功能分支工作流
- 每个功能在独立分支开发
- 通过Pull Request合并
3. Git Flow
bash
# 初始化Git Flow
git flow init
# 开始新功能
git flow feature start feature-name
# 完成功能
git flow feature finish feature-name
# 发布版本
git flow release start 1.0.0
git flow release finish 1.0.0
4. Forking工作流
- 每个开发者fork主仓库
- 通过Pull Request贡献代码
- 开源项目常用
九、Git 工具与技巧
1. 图形化工具
- gitk:内置图形化历史查看器
- GitHub Desktop:GitHub官方GUI
- SourceTree:免费的Git GUI客户端
- VS Code Git集成:内置的Git支持
2. 命令行增强
bash
# 更美观的log
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
# 别名配置(添加到~/.gitconfig)
[alias]
co = checkout
br = branch
ci = commit
st = status
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
3. 二分查找问题提交
bash
git bisect start
git bisect bad # 当前版本有问题
git bisect good v1.0.0 # 标记已知好版本
# 测试后标记good/bad
git bisect reset # 结束
十、常见问题解决
1. 合并冲突
bash
# 查看冲突文件
git status
# 手动解决冲突后
git add resolved-file.txt
git commit
2. 恢复误删分支
bash
# 查找删除的分支提交
git reflog
# 恢复分支
git branch branch-name commit-hash
3. 大文件处理
bash
# 使用git-lfs管理大文件
git lfs install
git lfs track "*.psd"
git add .gitattributes
4. 清理历史
bash
# 交互式变基
git rebase -i HEAD~5
# 清理历史大文件
git filter-branch --tree-filter 'rm -f large-file.iso' HEAD
十一、Git 最佳实践
-
提交规范:
-
使用明确的提交信息
-
feat: 添加用户登录功能
fix: 修复首页加载错误
docs: 更新API文档
-
-
分支管理:
- 保持主分支可部署
- 功能分支尽量小且专注
- 定期同步主分支
-
工作习惯:
- 频繁提交,原子性提交
- 先拉取再推送
- 使用.gitignore排除不需要的文件
-
团队协作:
- 明确合并权限
- 代码审查流程
- 定义清晰的工作流
十二、Git 进阶资源
- 官方文档:https://git-scm.com/doc
- Pro Git 书籍:https://git-scm.com/book
- Git 可视化学习:https://learngitbranching.js.org/
- Git 练习平台:https://gitexercises.fracz.com/
通过掌握这些Git操作,您将能够高效管理代码版本,无论是个人项目还是团队协作开发。记住,Git的强大在于实践,多尝试不同的命令和工作流,找到最适合您项目的方式。