Git版本控制系统
Git是目前最流行的分 布式版本控制系统,是每个开发者必须掌握的工具。本指南将帮助你从零开始学习Git。
🎯 什么是Git?
Git是一个开源的分布式版本控制系统,用于跟踪文件的变化,协调多人协作开发。
为什么使用Git?
- 版本控制: 跟踪文件的历史变化
- 协作开发: 多人同时开发同一项目
- 分支管理: 并行开发不同功能
- 备份恢复: 防止代码丢失
- 代码审查: 通过Pull Request进行代码审查
🚀 Git基础概念
工作区域
- 工作目录: 你正在编辑的文件
- 暂存区: 准备提交的文件
- 本地仓库: 本地的Git仓库
- 远程仓库: 托管在服务器上的仓库
文件状态
🛠️ Git安装和配置
安装Git
# Windows (使用Chocolatey)
choco install git
# macOS (使用Homebrew)
brew install git
# Ubuntu/Debian
sudo apt-get install git
# CentOS/RHEL
sudo yum install git
初始配置
# 设置用户名和邮箱
git config --global user.name "Hanmi255"
git config --global user.email "hanmi2550505@gmail.com"
# 设置默认编辑器
git config --global core.editor "code --wait"
# 查看配置
git config --list
# 查看特定配置
git config user.name
📁 仓库操作
创建仓库
# 初始化新仓库
git init
# 克隆远程仓库
git clone https://github.com/hanmi255/my-project.git
# 克隆到指定目录
git clone https://github.com/hanmi255/my-project.git my-folder
查看状态
# 查看仓库状态
git status
# 简洁格式
git status -s
# 查看差异
git diff # 工作目录 vs 暂存区
git diff --staged # 暂存区 vs 最新提交
git diff HEAD # 工作目录 vs 最新提交
📝 基本操作
添加和提交
# 添加文件到暂存区
git add filename.txt # 添加单个文件
git add . # 添加所有文件
git add *.py # 添加所有Python文件
git add src/ # 添加整个目录
# 提交更改
git commit -m "Add new feature"
# 添加并提交(跳过暂存区)
git commit -am "Update existing files"
# 修改最后一次提交
git commit --amend -m "Updated commit message"
查看历史
# 查看提交历史
git log
# 简洁格式
git log --oneline
# 图形化显示
git log --graph --oneline
# 查看特定文件的历史
git log filename.txt
# 查看最近n次提交
git log -n 5
# 查看提交详情
git show commit-hash
撤销操作
# 撤销工作目录的修改
git checkout -- filename.txt
# 撤销暂存区的文件
git reset HEAD filename.txt
# 撤销最后一次提交(保留修改)
git reset --soft HEAD~1
# 撤销最后一次提交(不保留修改)
git reset --hard HEAD~1
# 撤销到特定提交
git reset --hard commit-hash
# 撤销对文件的跟踪
git rm --cached filename.txt
# 撤销对文件夹的跟踪
git rm -r --cached dirname
🌿 分支管理
分支操作
# 查看分支
git branch # 本地分支
git branch -r # 远程分支
git branch -a # 所有分支
# 创建分支
git branch feature-login
# 切换分支
git checkout feature-login
# 创建并切换分支
git checkout -b feature-signup
# 重命名分支
git branch -m old-name new-name
# 删除分支
git branch -d feature-login # 安全删除
git branch -D feature-login # 强制删除
分支合并
# 合并分支
git checkout main
git merge feature-login
# 无快进合并(保留分支历史)
git merge --no-ff feature-login
# 压缩合并(将多个提交合并为一个)
git merge --squash feature-login
解决冲突
# 当合并出现冲突时
git status # 查看冲突文件
# 手动编辑冲突文件,然后
git add conflicted-file.txt
git commit -m "Resolve merge conflict"
# 使用合并工具
git mergetool
🌐 远程仓库
远程操作
# 查看远程仓库
git remote -v
# 添加远程仓库
git remote add origin https://github.com/hanmi255/my-project.git
# 推送到远程仓库
git push origin main
# 设置上游分支
git push -u origin main
# 拉取远程更新
git pull origin main
# 获取远程更新(不合并)
git fetch origin
# 删除远程分支
git push origin --delete feature-branch
跟踪分支
# 创建跟踪分支
git checkout -b feature-branch origin/feature-branch
# 设置上游分支
git branch --set-upstream-to=origin/main main
# 推送新分支
git push -u origin feature-branch
🏷️ 标签管理
# 创建轻量标签
git tag v1.0
# 创建注释标签
git tag -a v1.0 -m "Version 1.0 release"
# 查看标签
git tag
git tag -l "v1.*"
# 查看标签信息
git show v1.0
# 推送标签
git push origin v1.0
git push origin --tags
# 删除标签
git tag -d v1.0
git push origin --delete v1.0
🔧 高级功能
Stash(储藏)
# 储藏当前工作
git stash
# 储藏时添加消息
git stash save "Work in progress on feature X"
# 查看储藏列表
git stash list
# 应用储藏
git stash apply # 应用最新储藏
git stash apply stash@{1} # 应用特定储藏
# 应用并删除储藏
git stash pop
# 删除储藏
git stash drop stash@{1}
git stash clear # 删除所有储藏
Rebase(变基)
# 变基到主分支
git checkout feature-branch
git rebase main
# 交互式变基(整理提交历史)
git rebase -i HEAD~3
# 在变基过程中解决冲突
git add conflicted-file.txt
git rebase --continue
# 取消变基
git rebase --abort
Cherry-pick(挑选提交)
# 挑选特定提交到当前分支
git cherry-pick commit-hash
# 挑选多个提交
git cherry-pick commit1 commit2
# 挑选提交范围
git cherry-pick commit1..commit2
📋 .gitignore文件
# .gitignore 示例
# 忽略特定文件
config.txt
secret.key
# 忽略特定类型文件
*.log
*.tmp
*.cache
# 忽略目录
node_modules/
.vscode/
__pycache__/
# 忽略特定路径下的文件
build/*.exe
logs/*.log
# 不忽略特定文件(例外)
!important.log
# 忽略所有.txt文件,但不忽略readme.txt
*.txt
!readme.txt
🔍 实用技巧
别名设置
# 设置常用别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.visual '!gitk'
# 使用别名
git st # 等同于 git status
git co main # 等同于 git checkout main
搜索和查找
# 在提交历史中搜索
git log --grep="bug fix"
# 搜索代码内容
git log -S "function_name"
# 查找文件
git ls-files | grep "pattern"
# 查看文件的修改历史
git blame filename.txt
# 查找引入bug的提交
git bisect start
git bisect bad # 当前版本有bug
git bisect good v1.0 # v1.0版本正常
# Git会自动切换到中间版本,测试后标记good或bad
git bisect good/bad
# 重复直到找到问题提交
git bisect reset # 结束bisect
工作流程
# 功能开发工作流
git checkout main
git pull origin main
git checkout -b feature/new-login
# 开发功能...
git add .
git commit -m "Implement new login feature"
git push -u origin feature/new-login
# 创建Pull Request
# 代码审查通过后合并
git checkout main
git pull origin main
git branch -d feature/new-login
📚 最佳实践
1. 提交信息规范
# 好的提交信息格式
feat: add user authentication
fix: resolve login button styling issue
docs: update API documentation
refactor: simplify user validation logic
test: add unit tests for user service
# 详细提交信息
feat: add user authentication
- Implement JWT token-based authentication
- Add login and logout endpoints
- Create user session management
- Update security middleware
Closes #123
2. 分支命名规范
# 功能分支
feature/user-authentication
feature/payment-integration
# 修复分支
fix/login-button-bug
hotfix/security-vulnerability
# 发布分支
release/v1.2.0
# 实验分支
experiment/new-ui-design
3. 工作流程建议
- 小而频繁的提交: 每个提交只包含一个逻辑变更
- 有意义的提交信息: 清楚描述做了什么和为什么
- 定期同步: 经常从主分支拉取最新代码
- 代码审查: 使用Pull Request进行代码审查
- 测试: 提交前确保代码通过测试
🚀 进阶学习
推荐资源
图形化工具
- GitKraken: 跨平台Git GUI
- SourceTree: Atlassian的免费Git GUI
- GitHub Desktop: GitHub官方桌面应用
- VS Code: 内置Git支持的编辑器
Git是一个强大的工具,掌握它需要时间和实践。从基础命令开始,逐步学习高级功能,你将能够高效地管理代码版本和协作开发!