Git 进阶技巧

掌握 Git 进阶技巧,提升开发效率。

分支管理

分支策略

Git Flow

标准的分支模型:

  • main:生产分支
  • develop:开发分支
  • feature/*:功能分支
  • release/*:发布分支
  • hotfix/*:热修复分支

GitHub Flow

简化的分支模型:

  • main:主分支
  • feature:功能分支

合并策略

Merge

git checkout main
git merge feature/new-feature

Rebase

git checkout feature/new-feature
git rebase main

Squash

git merge --squash feature/new-feature

高级命令

Interactive Rebase

整理提交历史:

git rebase -i HEAD~5

可用操作:

  • pick:保留提交
  • reword:修改提交信息
  • squash:合并到上一个提交
  • drop:删除提交

Cherry-pick

选择性合并提交:

git cherry-pick abc123
git cherry-pick abc123..def456

Stash

暂存工作区:

# 暂存
git stash
git stash save "work in progress"

# 查看
git stash list

# 恢复
git stash pop
git stash apply stash@{1}

Bisect

二分查找问题提交:

git bisect start
git bisect bad HEAD
git bisect good v1.0
# 测试后标记
git bisect good/bad
git bisect reset

撤销操作

撤销工作区

git checkout -- file.txt
git restore file.txt

撤销暂存区

git reset HEAD file.txt
git restore --staged file.txt

撤销提交

# 软重置(保留更改)
git reset --soft HEAD~1

# 硬重置(丢弃更改)
git reset --hard HEAD~1

# 创建撤销提交
git revert abc123

远程操作

多远程仓库

git remote add upstream https://github.com/original/repo.git
git fetch upstream
git merge upstream/main

推送技巧

# 强制推送(慎用)
git push --force-with-lease

# 推送标签
git push --tags

子模块

添加子模块

git submodule add https://github.com/lib/lib.git libs/lib

更新子模块

git submodule update --init --recursive

Git Hooks

常用钩子

  • pre-commit:提交前检查
  • commit-msg:检查提交信息
  • pre-push:推送前检查

示例

#!/bin/sh
# .git/hooks/pre-commit
npm run lint
npm run test

配置优化

常用别名

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --oneline --graph"

其他配置

git config --global pull.rebase true
git config --global push.default current

总结

熟练使用 Git 进阶功能可以大大提升团队协作效率。