Featured image of post Git学习笔记

Git学习笔记

写在前面

在日常开发中,规范的Git工作流能大大提高团队协作效率,减少不必要的冲突和问题。这里整理一下常用的Git工作流和最佳实践,希望对大家有帮助。

几种常见的Git工作流

Git Flow - 适合大项目

这个比较复杂,但是规范。如果你们项目比较大,发版周期固定,可以用这个。

简单说就是这几个分支:

  • master - 线上代码,别乱动
  • develop - 开发主分支,大家的代码最终都合到这里
  • feature/xxx - 开发新功能用的
  • release/xxx - 准备发版用的
  • hotfix/xxx - 线上出bug紧急修复用的
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 装个git flow工具,省事
git flow init

# 开发新功能
git flow feature start login-page
# 写代码...
git flow feature finish login-page

# 准备发版
git flow release start v1.0.0
# 测试、修bug...
git flow release finish v1.0.0

# 线上出bug了,紧急修复
git flow hotfix start fix-login-bug
# 修bug...
git flow hotfix finish fix-login-bug

GitHub Flow - 简单粗暴

这个简单多了,就一个主分支,适合小团队或者经常发版的项目。

规则很简单:

  1. master分支随时可以发版
  2. 开发新功能就从master拉个分支
  3. 写完了发PR,让别人review一下
  4. 合并后直接发版
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 拉个分支开发
git checkout -b feature/add-login

# 写代码,提交
git add .
git commit -m "加了个登录功能"

# 推到远程
git push origin feature/add-login

# 然后去GitHub/GitLab创建PR
# review通过就合并,然后发版

GitLab Flow - 中庸之道

这个介于上面两种之间,有环境分支的概念。

1
2
3
4
5
6
7
8
# 一般是这样的流程
master -> staging -> production

# 开发功能
git checkout -b feature/new-stuff
# 写完合并到master
# master自动部署到测试环境
# 测试OK了再合并到production分支发版

commit信息别瞎写

规范的commit信息对于项目维护和问题追踪非常重要,能让团队协作更加高效。

简单的格式

1
类型: 简单描述一下改了啥

常用的类型:

  • feat - 新功能
  • fix - 修bug
  • docs - 改文档
  • style - 改格式(不影响功能的)
  • refactor - 重构代码
  • test - 测试相关

举几个例子

1
2
3
4
5
6
7
8
9
# 好的commit信息
git commit -m "feat: 添加用户登录功能"
git commit -m "fix: 修复登录页面验证码不显示的问题"
git commit -m "docs: 更新README安装说明"

# 别这样写
git commit -m "fix"
git commit -m "更新"
git commit -m "修改了一些东西"

分支名别乱起

分支名起得有意义一点,一看就知道是干啥的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 推荐这样
feature/user-login        # 开发用户登录功能
fix/login-bug            # 修复登录bug
hotfix/urgent-security   # 紧急安全修复

# 别这样
test
my-branch
临时分支
aaaa

Code Review别走过场

Code Review是保证代码质量的重要环节,认真的review能发现不少潜在问题,提高代码质量。

简单的检查项

  • 代码能跑吗?
  • 逻辑有问题吗?
  • 有没有明显的bug?
  • 代码风格统一吗?
  • 有没有写注释?

几个有用的命令

1
2
3
4
5
6
7
8
# 看看改了哪些文件
git diff --stat master

# 看具体改了啥
git diff master

# 看提交记录
git log --oneline master..HEAD

解决冲突别慌

冲突是常有的事,别一看到冲突就慌。

怎么避免冲突

  1. 经常pull最新代码
  2. 别一次改太多文件
  3. 改同一个文件前先沟通一下

冲突了怎么办

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 先拉最新代码
git pull origin master

# 如果有冲突,打开文件手动解决
# 找到 <<<<<<< ======= >>>>>>> 这些标记
# 删掉不要的代码,保留要的

# 解决完了继续
git add .
git commit -m "解决冲突"

# 或者用rebase(推荐)
git rebase origin/master
# 解决冲突后
git add .
git rebase --continue

一些有用的工具

Git Hooks - 提交前检查

可以设置一些钩子,提交前自动检查代码格式、跑测试什么的。

1
2
3
4
5
6
7
8
# .git/hooks/pre-commit
#!/bin/sh
# 提交前跑一下测试
npm test
if [ $? -ne 0 ]; then
  echo "测试挂了,先修复再提交"
  exit 1
fi

CI/CD自动化

用GitHub Actions或者Jenkins之类的,PR的时候自动跑测试。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 简单的GitHub Actions
name: 测试
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - run: npm install
    - run: npm test

一些实用技巧

Git别名 - 偷懒神器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 设置一些常用的别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.cm commit
git config --global alias.lg "log --oneline --graph"

# 以后就可以这样用
git co master    # 等于 git checkout master
git st          # 等于 git status
git cm -m "xxx" # 等于 git commit -m "xxx"

推荐的工具

  • Git客户端: SourceTree(图形界面,新手友好)
  • VS Code插件: GitLens(看代码历史很方便)
  • 命令行工具: tig(命令行下的git图形界面)

总结

其实Git工作流没那么复杂,关键是团队要统一,别各搞各的。

几个要点:

  1. 选个适合团队的工作流,别瞎折腾
  2. commit信息写清楚点
  3. 经常pull代码,减少冲突
  4. code review认真点,别走过场
  5. 用点工具提高效率

最后,Git这东西熟能生巧,多用就会了。遇到问题别慌,Google一下基本都能解决。

参考链接

使用 Hugo 构建
主题 StackJimmy 设计