Git 是现代软件开发中不可或缺的工具,除了基本的 commit、push、pull 操作外,Git 还有很多高级用法能够大大提高开发效率。

## 分支管理策略

### Git Flow 模型
```
master 主分支,用于生产环境
develop 开发分支,用于集成新功能
feature/* 功能分支
release/* 发布分支
hotfix/* 热修复分支
```

### 分支操作
```bash
# 创建并切换到新分支
git checkout -b feature/new-feature

# 合并分支
git merge feature/new-feature

# 删除分支
git branch -d feature/new-feature

# 强制删除分支
git branch -D feature/new-feature
```

## 高级合并技巧

### 1. 变基(Rebase)
```bash
# 将当前分支变基到目标分支
git rebase master

# 交互式变基
git rebase -i HEAD~3
```

### 2. 挑选提交(Cherry-pick)
```bash
# 将指定提交应用到当前分支
git cherry-pick commit-hash
```

### 3. 暂存工作区
```bash
# 暂存当前工作
git stash

# 查看暂存列表
git stash list

# 恢复暂存的工作
git stash pop

# 应用指定暂存
git stash apply stash@{0}
```

## 历史操作

### 1. 修改最后一次提交
```bash
# 修改提交信息
git commit --amend

# 添加新文件到最后一次提交
git add .
git commit --amend --no-edit
```

### 2. 回滚操作
```bash
# 回滚到指定提交(保留工作区修改)
git reset commit-hash

# 硬回滚(丢弃工作区修改)
git reset --hard commit-hash

# 回滚到指定提交(创建新提交)
git revert commit-hash
```

### 3. 查找问题提交
```bash
# 二分查找问题提交
git bisect start
git bisect bad
git bisect good commit-hash
git bisect bad
git bisect reset
```

## 远程仓库操作

### 1. 远程分支管理
```bash
# 查看远程分支
git branch -r

# 获取远程分支信息
git fetch origin

# 拉取远程分支到本地
git checkout -b local-branch origin/remote-branch

# 删除远程分支
git push origin --delete remote-branch
```

### 2. 强制推送
```bash
# 强制推送(谨慎使用)
git push --force-with-lease origin branch-name
```

## 配置优化

### 1. 别名设置
```bash
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm commit
```

### 2. 忽略文件配置
```bash
# 全局忽略文件
git config --global core.excludesfile ~/.gitignore_global

# 忽略文件权限变化
git config core.filemode false
```

## 实用工具

### 1. 查看提交历史
```bash
# 图形化显示提交历史
git log --graph --oneline --all

# 查看指定文件的修改历史
git log -p filename

# 查看统计信息
git log --stat
```

### 2. 差异比较
```bash
# 比较分支差异
git diff master..feature-branch

# 比较指定提交
git diff commit1 commit2

# 查看工作区和暂存区的差异
git diff
```

## 最佳实践

1. **频繁提交**:小而频繁的提交更容易追踪和回滚
2. **清晰的提交信息**:使用规范的提交信息格式
3. **定期同步**:及时获取远程仓库的最新更新
4. **分支命名规范**:使用有意义的分支名称
5. **代码审查**:在合并前进行代码审查

掌握这些高级用法,你将能够更加高效地使用 Git 进行版本控制。记住,Git 是一个强大的工具,需要不断练习才能熟练掌握。