跳到主要内容

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 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是一个强大的工具,掌握它需要时间和实践。从基础命令开始,逐步学习高级功能,你将能够高效地管理代码版本和协作开发!