Git版本控制系统
概述
Git是目前世界上最先进的分布式版本控制系统,由Linux创始人Linus Torvalds开发,用于Linux内核开发的版本管理。Git的设计思想是分布式和快照存储,而非差异比较。
核心特点
- 分布式存储: 每个开发者都拥有完整代码仓库
- 快照存储: 保存完整项目状态而非差异
- 分支操作: 轻量、快速的分支切换与合并
基本概念
Git工作区域
Git有三个主要工作区域,文件在其中流转:
- 工作目录(Working Directory):实际文件所在的目录,可直接编辑修改
- 暂存区(Staging Area/Index):临时存储修改,准备提交到仓库
- 本地仓库(Repository):保存项目的所有版本历史
工作流程:
git add
将修改从工作目录添加到暂存区git commit
将暂存区的修改提交到本地仓库
Git文件状态
Git中的文件可能处于以下四种状态:
状态 | 描述 | 命令操作 |
---|---|---|
未跟踪 (Untracked) | 新创建的文件,Git未记录其变化 | git add 文件名 开始跟踪 |
已修改 (Modified) | 跟踪文件的内容发生变化 | git add 文件名 暂存修改 |
已暂存 (Staged) | 修改已添加到暂存区,准备提交 | git commit 提交到仓库 |
已提交 (Committed) | 修改已安全存储在本地仓库 | git push 推送到远程仓库 |
基本命令
初始化与配置
# 初始化新仓库
git init
# 配置用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 克隆远程仓库
git clone https://github.com/username/repository.git
基本工作流
# 查看文件状态
git status
# 添加文件到暂存区
git add filename # 添加指定文件
git add . # 添加所有修改
# 提交到本地仓库
git commit -m "提交说明"
# 查看提交历史
git log
git log --oneline # 简洁模式
分支操作
# 创建新分支
git branch branch-name
# 切换分支
git checkout branch-name
git switch branch-name # Git 2.23+ 新命令
# 创建并切换到新分支
git checkout -b branch-name
git switch -c branch-name # Git 2.23+ 新命令
# 合并分支
git merge branch-name
# 删除分支
git branch -d branch-name # 安全删除(已合并的分支)
git branch -D branch-name # 强制删除
远程仓库操作
# 添加远程仓库
git remote add origin https://github.com/username/repository.git
# 推送到远程仓库
git push -u origin branch-name # 首次推送并设置上游分支
git push # 后续推送
# 拉取远程更新
git fetch # 仅下载更新
git pull # 下载并合并更新
Git工作流模型
集中式工作流
所有开发者直接在主分支上工作,适合小型团队和简单项目。
Git Flow工作流
分支类型 | 用途 | 命名约定 |
---|---|---|
master | 产品发布分支,只包含稳定版本 | master |
develop | 开发分支,包含最新开发代码 | develop |
feature | 用于开发新功能 | feature/功能名称 |
release | 版本发布准备 | release/版本号 |
hotfix | 紧急bug修复 | hotfix/bug描述 |
GitHub Flow工作流
一种简化的工作流,适合持续部署的项目:
- 创建分支:从master分支创建功能分支
- 添加提交:在功能分支上开发并提交
- 提交PR:创建Pull Request请求合并
- 讨论审查:团队成员审查代码并讨论
- 部署测试:在合并前进行部署测试
- 合并:确认无问题后合并到master
高级技巧
Git Stash(储藏)
当需要切换分支但又不想提交当前工作时:
# 储藏当前工作
git stash
# 查看储藏列表
git stash list
# 应用最近的储藏
git stash apply
# 应用并删除储藏
git stash pop
# 删除储藏
git stash drop stash@{n}
Git Cherry-pick(挑拣提交)
# 将指定提交应用到当前分支
git cherry-pick <commit-hash>
Git Rebase(变基)
# 变基操作(谨慎使用)
git rebase master # 将当前分支变基到master
git rebase -i HEAD~3 # 交互式变基,合并最近3个提交
常见问题解决
撤销操作
情况 | 命令 |
---|---|
撤销工作区修改 | git checkout -- filename``git restore filename (Git 2.23+) |
撤销暂存区修改 | git reset HEAD filename``git restore --staged filename (Git 2.23+) |
修改最近一次提交 | git commit --amend |
撤销已推送的提交 | git revert commit-hash |
解决冲突
当合并或变基操作遇到冲突时:
-
查看冲突文件:冲突部分会被标记
<<<<<<< HEAD
当前分支代码
=======
合入分支代码
>>>>>>> branch-name -
编辑文件解决冲突:手动修改文件,决定保留哪些内容
-
标记为已解决:
git add filename
-
继续合并/变基过程:
git merge --continue # 合并时
git rebase --continue # 变基时
Git工具与资源
常用GUI工具
- Sourcetree:免费的Git图形界面工具
- GitKraken:跨平台Git客户端
- GitHub Desktop:GitHub官方客户端
- TortoiseGit:Windows资源管理器集成
学习资源
Git是一个强大而复杂的版本控制系统,掌握其基本概念和常用命令能够显著提高开发效率。随着使用经验的积累,你会逐渐熟悉更多高级功能,使代码管理更加高效。