Git 完全指南:入门篇
目录
- Git 简介
- 安装与配置
- 基础概念
- 常用命令详解
- 分支管理
- 远程仓库
- 高级技巧
- 工作流程
- 最佳实践
Git 简介
什么是 Git?
Git 是一个分布式版本控制系统,由 Linus Torvalds 于 2005 年创建。它能够:
- 跟踪文件变化
- 协调多人协作开发
- 恢复历史版本
- 管理代码分支
为什么使用 Git?
- 分布式:每个开发者都有完整的代码仓库副本
- 高效:大部分操作在本地完成
- 强大的分支系统:轻松创建、合并分支
- 完整性:使用 SHA-1 哈希保证数据完整性
安装与配置
安装 Git
Windows:
# 下载 Git for Windows
https://gitforwindows.org/
macOS:
# 使用 Homebrew
brew install git# 或使用 Xcode Command Line Tools
xcode-select --install
Linux:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install git# CentOS/RHEL
sudo yum install git
基础配置
# 设置用户信息
git config --global user.name "你的姓名"
git config --global user.email "你的邮箱@example.com"# 设置默认编辑器
git config --global core.editor "code --wait" # VS Code
git config --global core.editor "vim" # Vim# 查看配置
git config --list# 设置行尾符(Windows用户重要)
git config --global core.autocrlf true
# Linux/macOS
git config --global core.autocrlf input
基础概念
三个工作区域
- 工作目录:实际操作文件的目录
- 暂存区:准备提交的文件临时存储区
- Git 仓库:最终存储项目历史和元数据的地方
文件状态生命周期
未跟踪 → 已跟踪 → 已修改 → 已暂存 → 已提交↑ ↓ ↑ ↓git add ← git add →git commit
常用命令详解
仓库初始化
# 初始化新仓库
git init# 克隆现有仓库
git clone https://github.com/username/repository.git
git clone https://github.com/username/repository.git my-project # 自定义目录名
基础工作流
# 检查状态
git status
git status -s # 简洁输出# 添加文件到暂存区
git add filename.txt # 添加特定文件
git add . # 添加所有文件
git add *.js # 添加所有js文件
git add src/ # 添加src目录# 提交更改
git commit -m "提交信息"
git commit -m "功能: 添加用户登录功能" # 好的提交信息格式# 查看提交历史
git log
git log --oneline # 简洁显示
git log --graph # 图形化显示分支
git log -p # 显示具体更改
git log --since="2023-01-01" # 按时间筛选
文件操作
# 查看文件差异
git diff # 工作区与暂存区的差异
git diff --staged # 暂存区与最新提交的差异
git diff HEAD # 工作区与最新提交的差异# 移动/重命名文件
git mv oldname.txt newname.txt# 删除文件
git rm filename.txt
git rm --cached filename.txt # 从git中删除,但保留本地文件# 恢复文件
git checkout -- filename.txt # 丢弃工作区的修改
git restore filename.txt # Git 2.23+ 新命令
分支管理
分支基础操作
# 查看分支
git branch # 本地分支
git branch -a # 所有分支(包括远程)
git branch -v # 显示最后提交信息# 创建分支
git branch feature-branch # 创建分支
git checkout -b feature-branch # 创建并切换到新分支# 切换分支
git checkout main
git switch feature-branch # Git 2.23+ 新命令# 合并分支
git checkout main
git merge feature-branch# 删除分支
git branch -d feature-branch # 安全删除(已合并)
git branch -D feature-branch # 强制删除(未合并)
分支合并策略
# 快进合并(默认)
git merge feature-branch# 禁用快进,创建合并提交
git merge --no-ff feature-branch# 变基(重写提交历史)
git checkout feature-branch
git rebase main# 交互式变基
git rebase -i HEAD~3 # 重新整理最近3个提交
解决冲突
当合并或变基出现冲突时:
- 编辑冲突文件(Git会标记冲突位置)
- 选择要保留的代码
- 删除冲突标记(<<<<<<<, =======, >>>>>>>)
- 添加解决后的文件
- 完成合并
# 冲突解决后
git add resolved-file.txt
git commit # 或 git rebase --continue
远程仓库
远程仓库操作
# 查看远程仓库
git remote -v# 添加远程仓库
git remote add origin https://github.com/username/repo.git# 重命名远程仓库
git remote rename origin upstream# 删除远程仓库
git remote remove origin# 获取远程更新
git fetch origin # 下载但不合并
git fetch --prune # 清理已删除的远程分支# 拉取更新
git pull origin main # 相当于 git fetch + git merge
git pull --rebase origin main # 使用rebase方式# 推送更改
git push origin main
git push -u origin feature-branch # 设置上游分支
标签管理
# 创建标签
git tag v1.0.0 # 轻量标签
git tag -a v1.0.0 -m "版本1.0.0" # 附注标签# 查看标签
git tag
git show v1.0.0# 推送标签
git push origin v1.0.0
git push origin --tags # 推送所有标签# 删除标签
git tag -d v1.0.0
git push origin --delete v1.0.0
高级技巧
撤销操作
# 撤销工作区修改
git checkout -- filename.txt
git restore filename.txt# 撤销暂存区文件
git reset HEAD filename.txt
git restore --staged filename.txt# 修改最后一次提交
git commit --amend# 回退到特定提交
git reset --soft HEAD~1 # 保留更改到暂存区
git reset --mixed HEAD~1 # 保留更改到工作区(默认)
git reset --hard HEAD~1 # 丢弃所有更改# 恢复被删除的分支
git reflog
git checkout -b recovered-branch <commit-hash>
储藏更改
# 储藏当前工作
git stash
git stash push -m "储藏信息"# 查看储藏列表
git stash list# 恢复储藏
git stash apply # 恢复但不删除
git stash apply stash@{1} # 恢复特定储藏
git stash pop # 恢复并删除# 删除储藏
git stash drop stash@{0}
git stash clear # 删除所有储藏
子模块
# 添加子模块
git submodule add https://github.com/username/repo.git path/to/submodule# 克隆包含子模块的仓库
git clone --recurse-submodules https://github.com/username/main-repo.git# 更新子模块
git submodule update --init --recursive
工作流程
功能分支工作流
# 1. 从main创建功能分支
git checkout -b feature/user-authentication# 2. 开发功能并提交
git add .
git commit -m "添加用户登录功能"# 3. 同步主分支更新
git checkout main
git pull origin main
git checkout feature/user-authentication
git rebase main# 4. 推送功能分支
git push -u origin feature/user-authentication# 5. 创建Pull Request合并到main
Git Flow 工作流
# 初始化git flow
git flow init# 开始新功能
git flow feature start MYFEATURE# 完成功能
git flow feature finish MYFEATURE# 开始发布
git flow release start 1.2.0# 完成发布
git flow release finish 1.2.0
最佳实践
提交信息规范
使用约定式提交:
<类型>[可选的作用域]: <描述>[可选的正文][可选的脚注]
常见类型:
feat: 新功能fix: 修复bugdocs: 文档更新style: 代码格式调整refactor: 重构test: 测试相关chore: 构建过程或辅助工具变动
示例:
feat(auth): 添加JWT身份验证- 实现用户登录接口
- 添加token刷新机制
- 更新API文档Closes #123
.gitignore 文件
创建合适的 .gitignore 文件:
# 依赖目录
node_modules/
vendor/# 构建输出
dist/
build/
*.jar
*.war# 环境变量文件
.env
.env.local# 日志文件
*.log
logs/# 系统文件
.DS_Store
Thumbs.db# IDE文件
.vscode/
.idea/
*.swp
*.swo
分支命名规范
main/master: 主分支develop: 开发分支feature/user-login: 功能分支release/v1.2.0: 发布分支hotfix/critical-bug: 热修复分支
实用技巧和工具
Git 别名
# 添加到 ~/.gitconfig
[alias]co = checkoutci = commitst = statusbr = branchlast = log -1 HEADlg = log --oneline --graph --allundo = reset --soft HEAD~1
调试工具
# 二分查找引入bug的提交
git bisect start
git bisect bad # 当前版本有问题
git bisect good v1.0.0 # 这个版本没问题
# Git会自动在中间提交测试,你标记good或bad
git bisect reset # 结束# 查找引入某行的提交
git blame filename.txt
大文件处理
# 使用 Git LFS (Large File Storage)
git lfs install
git lfs track "*.psd"
git lfs track "*.mp4"
git add .gitattributes
总结
Git 是一个强大而灵活的工具,掌握它需要时间和实践。建议:
- 从小开始:先熟练掌握基础命令
- 理解概念:明白工作区、暂存区、仓库的关系
- 勤于练习:在实际项目中应用所学知识
- 阅读文档:
git help <command>查看详细帮助 - 使用图形工具:如 GitKraken、SourceTree 辅助理解
记住,Git 的核心价值在于:
- 版本控制和安全
- 团队协作效率
- 代码历史可追溯性
- 灵活的开发和发布流程
