1. Git与GitHub基础认知
第一次接触版本控制时,我把Git想象成一个无限撤回功能的超级记事本。作为分布式版本控制系统,Git会记录每个文件的每次改动,而GitHub则是托管这些变更记录的云端平台。两者的关系就像本地相册和云盘——你可以在本地用Git管理代码版本,再通过GitHub实现团队协作和备份。
常见的误解是认为GitHub就是Git,其实Git是工具,GitHub是服务。类似的平台还有GitLab、Bitbucket等,但GitHub凭借其开源生态成为事实上的标准。我2013年第一次提交代码时,整个团队还在用SVN,迁移到Git后才发现分支操作能如此高效。
2. 本地仓库初始化与配置
2.1 环境准备
安装Git后首要任务是配置身份标识,这就像给你的代码签名:
bash复制git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
我建议始终使用--global参数设置全局配置,避免每个项目重复设置。通过git config --list可以查看当前所有配置项。
警告:邮箱务必使用GitHub账号绑定的真实邮箱,否则贡献统计会出错
2.2 仓库创建
初始化新仓库有两种场景:
- 从零开始:
bash复制mkdir project && cd project
git init
此时会生成隐藏的.git目录,存储所有版本数据
- 克隆现有仓库:
bash复制git clone https://github.com/user/repo.git
克隆时可以通过-b指定分支:
bash复制git clone -b dev https://github.com/user/repo.git
3. 日常开发工作流
3.1 变更管理三板斧
典型的修改提交流程:
bash复制git add . # 暂存所有修改
git commit -m "描述" # 提交到本地仓库
git push origin main # 推送到远程
但实际开发中我推荐更精细的操作:
bash复制git add -p # 交互式选择变更片段
git diff --cached # 检查暂存内容
git commit -v # 查看差异后提交
3.2 分支管理策略
功能开发应该基于新分支:
bash复制git checkout -b feature/login
完成后合并到主分支:
bash复制git checkout main
git merge feature/login
我团队使用的分支规范:
| 分支类型 | 命名规则 | 生命周期 |
|---|---|---|
| 主分支 | main | 永久 |
| 功能分支 | feature/模块名 | 功能上线后删除 |
| 热修复 | hotfix/问题描述 | 修复发布后删除 |
4. 远程仓库交互
4.1 多远程仓库配置
项目可能需要同步到多个平台:
bash复制git remote add github https://github.com/user/repo.git
git remote add gitlab https://gitlab.com/user/repo.git
推送时指定远程:
bash复制git push github main
4.2 协作冲突解决
当多人修改同一文件时会出现冲突。处理流程:
- 拉取最新代码:
bash复制git pull origin main
- 用IDE或
git mergetool解决冲突 - 标记冲突已解决:
bash复制git add conflicted_file.js
git commit
经验:频繁
git pull --rebase可以减少冲突概率
5. 高级操作技巧
5.1 版本穿梭与修复
查看提交历史:
bash复制git log --graph --oneline
撤销最近提交:
bash复制git reset --soft HEAD~1
修改上次提交(适合漏文件或写错描述):
bash复制git add missing_file.js
git commit --amend
5.2 暂存区灵活应用
临时保存未完成的工作:
bash复制git stash
恢复时:
bash复制git stash pop
查看存储列表:
bash复制git stash list
6. 实战问题排查
6.1 常见错误处理
- 提交到错误分支:
bash复制git log --oneline -n 1 # 记下提交hash
git reset --hard HEAD~1 # 原分支回退
git checkout target_branch
git cherry-pick [hash] # 应用到正确分支
- 误删文件恢复:
bash复制git checkout HEAD -- lost_file.js
6.2 性能优化
大仓库克隆优化:
bash复制git clone --depth=1 https://github.com/user/repo.git
清理历史垃圾:
bash复制git gc --aggressive
7. 自动化与钩子
7.1 Git Hooks应用
在.git/hooks目录添加脚本可实现自动化。例如pre-commit钩子:
bash复制#!/bin/sh
npm run lint # 提交前自动检查代码规范
7.2 CI/CD集成
GitHub Actions示例配置:
yaml复制name: CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm install
- run: npm test
8. 可视化工具推荐
虽然命令行是核心,但图形工具能提升效率:
- VS Code内置的Git管理
- GitHub Desktop适合新手
- GitKraken提供直观的提交树
我个人的组合是:日常操作用命令行+VS Code,复杂合并用GitKraken可视化解决。记住所有图形工具最终都是调用Git命令,理解底层原理才能灵活应对各种场景。