Git 详解
Git 是一个分布式版本控制系统,用于高效地管理项目代码的版本历史。它是目前最流行的版本控制工具之一,广泛应用于软件开发领域。Git 的分布式架构允许开发者在本地进行代码的版本管理,并与远程仓库同步,实现团队协作。
1. Git 的核心概念
1.1 版本控制系统
- 集中式版本控制(如 SVN):所有版本信息存储在中央服务器,开发者需联网访问。
- 分布式版本控制(Git):每个开发者拥有完整的版本库,可以离线工作。
1.2 Git 的主要特点
- 分布式架构:每个开发者都有完整的版本库,无需依赖中央服务器。
- 速度快:Git 的分支、合并等操作非常高效。
- 小体积:Git 通过压缩存储文件差异,占用空间小。
- 非线性开发:支持多个开发分支并行工作。
- 安全性:历史记录不可篡改,确保版本完整性。
- 灵活性:适用于小型个人项目到大型企业项目。
2. Git 的基本操作对象
2.1 工作区(Working Directory)
- 本地实际存储代码的目录。
- 这是开发者直接操作的区域。
2.2 暂存区(Staging Area/Index)
- 一个临时区域,用于存储将要提交到版本库的文件。
- 通过
git add
命令将修改放入暂存区。
2.3 本地仓库(Local Repository)
- 通过
git commit
将暂存区的文件提交到本地仓库。
2.4 远程仓库(Remote Repository)
- 集中存储代码的服务器(如 GitHub、GitLab、Bitbucket 等)。
- 本地仓库可以与远程仓库同步。
3. Git 的常用命令
3.1 初始化与配置
-
初始化 Git 仓库:
bashgit init
-
配置用户名和邮箱:
bashgit config --global user.name "Your Name" git config --global user.email "your_email@example.com"
-
查看当前配置:
bashgit config --list
3.2 文件操作
-
查看文件状态:
bashgit status
-
添加文件到暂存区:
bashgit add <file> git add . # 添加所有修改
-
提交文件到本地仓库:
bashgit commit -m "Commit message"
-
删除文件:
bashgit rm <file>
3.3 分支操作
-
查看分支:
bashgit branch
-
创建新分支:
bashgit branch <branch_name>
-
切换分支:
bashgit checkout <branch_name>
或:
bashgit switch <branch_name>
-
创建并切换到新分支:
bashgit checkout -b <branch_name>
-
合并分支:
bashgit merge <branch_name>
-
删除分支:
bashgit branch -d <branch_name>
3.4 远程操作
-
添加远程仓库:
bashgit remote add origin <remote_repository_url>
-
查看远程仓库:
bashgit remote -v
-
推送到远程仓库:
bashgit push origin <branch_name>
-
拉取远程代码:
bashgit pull origin <branch_name>
-
克隆远程仓库:
bashgit clone <repository_url>
3.5 查看历史记录
-
查看提交历史:
bashgit log
-
简化日志查看:
bashgit log --oneline --graph --all
3.6 回滚与恢复
-
恢复暂存区文件:
bashgit restore --staged <file>
-
恢复工作区文件:
bashgit restore <file>
-
回退到某次提交:
bashgit reset --hard <commit_hash>
4. Git 的分支管理
4.1 为什么需要分支
- 在团队开发中,不同功能和 Bug 修复可以在独立分支中进行开发,互不干扰。
- 常用分支模型:
- 主分支(main/master):稳定版本。
- 开发分支(develop):集成开发版本。
- 功能分支(feature/xxx):开发新功能。
- 修复分支(bugfix/xxx 或 hotfix/xxx):修复问题。
4.2 分支合并的两种方式
- Fast-forward 合并:直接移动分支指针,适用于分支间没有其他提交。
- 三方合并:创建一个新的合并提交,适用于分支有分歧。
4.3 分支冲突
- 当两个分支修改了同一文件的同一部分时,合并可能产生冲突。
- 解决步骤:
-
Git 提示冲突后,手动编辑冲突文件。
-
标记解决冲突后,添加文件到暂存区:
bashgit add <file>
-
提交合并:
bashgit commit
-
5. Git 工作流程
5.1 单人开发工作流
- 初始化项目:
git init
- 编写代码并添加到暂存区:
git add .
- 提交到本地仓库:
git commit -m "message"
- 推送到远程仓库:
git push origin main
5.2 多人协作工作流
- 克隆远程仓库:
git clone <url>
- 创建分支开发功能:
git checkout -b feature/xxx
- 提交代码到远程分支:
git push origin feature/xxx
- 提交合并请求(Pull Request/PR)。
- 解决合并冲突(如果有)。
- 合并分支到主分支。
6. Git 的高级功能
6.1 标签(Tags)
-
创建标签:
bashgit tag <tag_name>
-
查看标签:
bashgit tag
-
推送标签到远程:
bashgit push origin <tag_name>
6.2 子模块(Submodule)
-
添加子模块:
bashgit submodule add <repository_url>
-
初始化子模块:
bashgit submodule update --init
6.3 Git 的钩子(Hooks)
- Git 提供钩子机制,在某些操作触发时自动执行脚本。
- 常见钩子:
pre-commit
:在提交代码前运行。post-merge
:在合并分支后运行。
7. Git 常见问题
7.1 推送失败:拒绝非 Fast-forward 合并
-
原因:远程仓库有新提交,本地版本落后。
-
解决方法:
bashgit pull origin <branch_name> --rebase git push origin <branch_name>
7.2 撤销已提交的代码
-
撤销最近一次提交(保留改动):
bashgit reset --soft HEAD~1
-
撤销最近一次提交(删除改动):
bashgit reset --hard HEAD~1
7.3 删除远程分支
-
删除远程分支:
bashgit push origin --delete <branch_name>
8. 总结
Git 是现代软件开发中不可或缺的工具,其强大的分布式架构、分支管理能力和丰富的功能支持了复杂的软件开发流程。无论是个人项目还是团队协作,熟练使用 Git 都能极大提升开发效率和代码质量。