notes/git-guide.md
2025-06-25 22:16:26 +08:00

4.8 KiB

Git 使用指南

基础概念

Git 是一个分布式版本控制系统,用于跟踪代码变更历史。

核心概念

  • 仓库 (Repository): 存储项目所有文件和历史记录的地方
  • 工作区 (Working Directory): 当前正在编辑的文件
  • 暂存区 (Staging Area): 准备提交的文件暂存地
  • 提交 (Commit): 保存项目快照的操作

基础配置

# 配置用户信息
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

# 查看配置
git config --list

常用命令

初始化和克隆

# 初始化新仓库
git init

# 克隆远程仓库
git clone <仓库地址>

文件操作

# 查看状态
git status

# 添加文件到暂存区
git add <文件名>          # 添加单个文件
git add .               # 添加所有文件
git add -A              # 添加所有变更(包括删除)

# 提交变更
git commit -m "提交信息"

# 查看变更差异
git diff                # 工作区与暂存区的差异
git diff --staged       # 暂存区与最后提交的差异

历史查看

# 查看提交历史
git log
git log --oneline       # 简洁格式
git log --graph         # 图形化显示

# 查看文件变更历史
git log -p <文件名>

分支操作

# 查看分支
git branch              # 本地分支
git branch -r           # 远程分支
git branch -a           # 所有分支

# 创建分支
git branch <分支名>

# 切换分支
git checkout <分支名>
git switch <分支名>     # Git 2.23+ 新命令

# 创建并切换分支
git checkout -b <分支名>
git switch -c <分支名>

# 删除分支
git branch -d <分支名>  # 安全删除
git branch -D <分支名>  # 强制删除

合并操作

# 合并分支
git merge <分支名>

# 变基操作
git rebase <分支名>

远程仓库

# 查看远程仓库
git remote -v

# 添加远程仓库
git remote add origin <仓库地址>

# 推送到远程
git push origin <分支名>
git push -u origin <分支名>  # 首次推送并设置上游

# 拉取远程变更
git pull origin <分支名>
git fetch origin        # 只获取不合并

撤销操作

# 撤销工作区变更
git checkout -- <文件名>
git restore <文件名>    # Git 2.23+ 新命令

# 撤销暂存区变更
git reset HEAD <文件名>
git restore --staged <文件名>

# 撤销提交
git reset --soft HEAD~1    # 保留变更在暂存区
git reset --mixed HEAD~1   # 保留变更在工作区
git reset --hard HEAD~1    # 完全撤销变更

# 创建反向提交
git revert <提交ID>

进阶技巧

标签管理

# 创建标签
git tag <标签名>
git tag -a <标签名> -m "标签说明"

# 查看标签
git tag

# 推送标签
git push origin <标签名>
git push origin --tags

暂存变更

# 暂存当前变更
git stash

# 查看暂存列表
git stash list

# 应用暂存变更
git stash apply         # 应用最新暂存
git stash pop          # 应用并删除最新暂存
git stash apply stash@{n}  # 应用指定暂存

# 删除暂存
git stash drop
git stash clear        # 清空所有暂存

重写历史

# 交互式变基
git rebase -i HEAD~n   # 修改最近n个提交

# 修改最后一次提交
git commit --amend

# 压缩提交
git rebase -i HEAD~n   # 使用squash命令

工作流程建议

基本工作流

  1. git status - 检查当前状态
  2. git add - 添加变更到暂存区
  3. git commit - 提交变更
  4. git push - 推送到远程仓库

功能开发流程

  1. git checkout -b feature/新功能 - 创建功能分支
  2. 开发和提交变更
  3. git checkout main - 切换到主分支
  4. git merge feature/新功能 - 合并功能分支
  5. git branch -d feature/新功能 - 删除功能分支

最佳实践

  1. 频繁提交: 小步快跑,经常提交变更
  2. 清晰的提交信息: 使用描述性的提交信息
  3. 使用分支: 为每个功能或修复创建分支
  4. 保持主分支稳定: 不要直接在主分支上开发
  5. 定期同步: 经常拉取远程变更
  6. 审查变更: 提交前检查变更内容

常见问题解决

合并冲突

# 查看冲突文件
git status

# 手动解决冲突后
git add <冲突文件>
git commit

忘记切换分支

# 将变更移到新分支
git stash
git checkout -b <新分支>
git stash pop

误删文件

# 恢复已删除的文件
git checkout HEAD -- <文件名>

有用的别名配置

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 等。