Git-版本控制系统
Git 是一个分布式版本控制系统,由Linux之父Linus Torvalds开发。它能够高效地处理从小型到超大型项目的所有内容,是现代软件开发中不可或缺的工具,几乎所有开源项目都使用Git进行版本管理。
主要特性
🔄 分布式版本控制
- 本地仓库: 每个开发者都有完整的代码历史
- 离线工作: 无需网络连接即可提交代码
- 分支管理: 强大的分支和合并功能
- 冲突解决: 智能的冲突检测和解决机制
🚀 高效性能
- 快速操作: 大部分操作在本地完成,速度极快
- 数据完整性: SHA-1哈希确保数据完整性
- 压缩存储: 高效的数据压缩算法
- 增量传输: 只传输变更的部分
🔧 灵活工作流
- 多种工作流: 支持集中式、功能分支、Gitflow等
- 临时存储: stash功能保存临时修改
- 标签管理: 支持轻量标签和附注标签
- 子模块: 支持项目依赖管理
🌐 协作功能
- 远程仓库: 支持多种远程仓库服务
- Pull Request: 代码审查和讨论
- 权限管理: 细粒度的访问控制
- Web界面: GitHub、GitLab等提供友好界面
项目地址
Git - 官网 Git - Github核心概念
1. 仓库 (Repository)
Git仓库包含项目的所有文件和版本历史:
# 初始化新仓库
git init
# 克隆远程仓库
git clone https://github.com/username/repository.git
# 查看仓库状态
git status
2. 提交 (Commit)
每次提交都保存了项目的一个快照:
# 添加文件到暂存区
git add filename.txt
# 提交更改
git commit -m "Add new feature"
# 查看提交历史
git log --oneline
3. 分支 (Branch)
分支允许在不影响主代码的情况下开发新功能:
# 创建新分支
git branch feature-branch
# 切换分支
git checkout feature-branch
# 创建并切换分支
git checkout -b feature-branch
# 合并分支
git merge feature-branch
实用命令
基础操作
# 配置用户信息
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 查看配置
git config --list
# 查看帮助
git help command
文件操作
# 添加文件
git add . # 添加所有文件
git add filename.txt # 添加特定文件
git add *.js # 添加所有JS文件
# 移除文件
git rm filename.txt # 删除文件
git rm --cached filename.txt # 从暂存区移除
# 重命名文件
git mv oldname.txt newname.txt
提交管理
# 提交更改
git commit -m "Commit message"
# 修改最后一次提交
git commit --amend
# 查看提交历史
git log
git log --oneline
git log --graph --oneline --all
分支操作
# 分支管理
git branch # 列出分支
git branch -d branch-name # 删除分支
git branch -r # 列出远程分支
# 合并操作
git merge branch-name # 合并分支
git rebase branch-name # 变基操作
远程仓库
# 远程仓库操作
git remote add origin https://github.com/username/repo.git
git push origin main
git pull origin main
git fetch origin
# 查看远程信息
git remote -v
高级功能
1. Stash 临时存储
# 保存临时修改
git stash
git stash push -m "WIP: working on feature"
# 查看stash列表
git stash list
# 应用stash
git stash pop
git stash apply stash@{0}
# 删除stash
git stash drop stash@{0}
2. 标签管理
# 创建标签
git tag v1.0.0
git tag -a v1.0.0 -m "Release version 1.0.0"
# 查看标签
git tag
git show v1.0.0
# 推送标签
git push origin v1.0.0
git push origin --tags
3. 子模块
# 添加子模块
git submodule add https://github.com/username/lib.git
# 初始化子模块
git submodule init
git submodule update
# 克隆包含子模块的仓库
git clone --recursive https://github.com/username/repo.git
工作流
1. 功能分支工作流
# 创建功能分支
git checkout -b feature/new-feature
# 开发功能
git add .
git commit -m "Implement new feature"
# 推送到远程
git push origin feature/new-feature
# 创建Pull Request
# 在GitHub/GitLab上创建PR
# 合并后删除分支
git branch -d feature/new-feature
2. Gitflow工作流
# 主分支结构
main (master) # 生产环境代码
develop # 开发环境代码
feature/* # 功能分支
release/* # 发布分支
hotfix/* # 热修复分支
3. 提交规范
# 提交信息格式
feat: add new feature
fix: fix bug in login
docs: update README
style: format code
refactor: refactor user service
test: add unit tests
chore: update dependencies
配置和别名
1. 全局配置
# 设置默认编辑器
git config --global core.editor "code --wait"
# 设置默认分支名
git config --global init.defaultBranch main
# 设置换行符处理
git config --global core.autocrlf input # Linux/Mac
git config --global core.autocrlf true # Windows
2. 别名配置
# 设置常用别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
3. .gitignore文件
# 忽略文件示例
node_modules/
*.log
.env
.DS_Store
build/
dist/
*.tmp
常见问题解决
1. 撤销操作
# 撤销工作区修改
git checkout -- filename.txt
# 撤销暂存区修改
git reset HEAD filename.txt
# 撤销提交
git reset --soft HEAD~1 # 保留修改
git reset --hard HEAD~1 # 删除修改
2. 冲突解决
# 查看冲突文件
git status
# 手动解决冲突后
git add resolved-file.txt
git commit -m "Resolve merge conflict"
3. 找回丢失的提交
# 查看操作历史
git reflog
# 恢复提交
git reset --hard HEAD@{1}
最佳实践
1. 提交规范
- 使用清晰的提交信息
- 每次提交只做一件事
- 经常提交,避免大块提交
- 使用规范的提交前缀
2. 分支管理
- 保持主分支稳定
- 使用描述性的分支名
- 及时删除已合并的分支
- 定期同步远程分支
3. 协作规范
- 使用Pull Request进行代码审查
- 编写清晰的PR描述
- 及时响应审查意见
- 保持代码库整洁
常见问题
Q: 如何撤销最后一次提交?
A: 使用 git reset --soft HEAD~1
保留修改,或 git reset --hard HEAD~1
删除修改。
Q: 如何查看文件的修改历史?
A: 使用 git log -p filename.txt
查看文件的详细修改历史。
Q: 如何合并多个提交?
A: 使用 git rebase -i HEAD~n
进行交互式变基。
Q: 如何解决合并冲突?
A: 手动编辑冲突文件,然后使用 git add
和 git commit
完成合并。
总结
Git 是一个功能强大的版本控制系统,具有以下优势:
- ✅ 完全免费开源
- ✅ 分布式架构
- ✅ 高效性能
- ✅ 强大的分支管理
- ✅ 丰富的生态系统
- ✅ 广泛的应用支持
Git 已经成为现代软件开发的标配工具,掌握Git对于任何开发者来说都是必不可少的技能。
Git 功能丰富,建议从基础命令开始学习,逐步掌握高级功能,在实践中不断提升Git技能。