Git 学习与总结
Git 是目前最流行的分布式版本控制系统,用于高效管理项目代码的版本迭代、协作开发和代码追踪。以下从核心概念、常用操作、工作流程及进阶技巧等方面进行总结:
一、核心概念
-
**工作区(Working Directory)**本地实际编辑代码的目录,即项目文件夹。
-
暂存区(Staging Area/Index) 临时存放待提交的修改,通过
git add将工作区文件添加至此。 -
本地仓库(Local Repository) 存储项目历史版本的数据库,通过
git commit将暂存区内容提交至此。 -
远程仓库(Remote Repository) 托管在服务器上的仓库(如 GitHub、GitLab),通过
git push/pull与本地仓库同步。 -
**提交(Commit)**版本的快照,每个提交有唯一哈希值(SHA-1),包含修改内容、作者、时间等信息。
-
分支(Branch) 独立的开发线,默认主分支为
main(或master),用于并行开发新功能或修复 Bug。 -
HEAD指向当前所在分支的最新提交。
二、常用操作
1. 基础配置
bash
运行
# 设置用户名和邮箱(全局)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 查看配置
git config --list
2. 仓库初始化与克隆
bash
运行
# 初始化本地仓库
git init
# 克隆远程仓库
git clone <远程仓库URL>
3. 工作区与暂存区操作
bash
运行
# 查看文件状态
git status
# 将文件添加到暂存区
git add <文件名> # 添加指定文件
git add . # 添加所有修改文件
# 撤销暂存区文件
git reset HEAD <文件名>
# 撤销工作区修改(恢复到最近提交状态)
git checkout -- <文件名>
4. 提交与日志
bash
运行
# 提交暂存区内容到本地仓库
git commit -m "提交说明"
# 修改最后一次提交(未推送到远程时使用)
git commit --amend
# 查看提交日志
git log # 完整日志
git log --oneline # 简洁日志
git log --graph # 图形化分支日志
5. 分支操作
bash
运行
# 查看分支
git branch # 本地分支
git branch -r # 远程分支
git branch -a # 所有分支
# 创建分支
git branch <分支名>
# 切换分支
git checkout <分支名>
git switch <分支名> # Git 2.23+ 推荐用法
# 创建并切换分支
git checkout -b <分支名>
git switch -c <分支名>
# 合并分支(当前分支合并目标分支)
git merge <目标分支>
# 删除分支
git branch -d <分支名> # 已合并分支
git branch -D <分支名> # 强制删除未合并分支
6. 远程仓库交互
bash
运行
# 关联远程仓库
git remote add origin <远程仓库URL>
# 查看远程仓库
git remote -v
# 拉取远程分支
git pull origin <分支名>
# 推送本地分支到远程
git push origin <分支名>
# 推送新分支到远程
git push -u origin <分支名>
# 删除远程分支
git push origin --delete <分支名>
7. 撤销与回滚
bash
运行
# 回滚到指定提交(保留修改,回退到暂存区)
git reset --soft <提交哈希>
# 回滚到指定提交(保留修改,回退到工作区)
git reset --mixed <提交哈希> # 默认
# 强制回滚到指定提交(丢弃所有后续修改)
git reset --hard <提交哈希>
# 恢复已删除的提交(通过reflog)
git reflog
git reset --hard <提交哈希>
三、典型工作流程
-
单人开发流程
git init/git clone→编辑代码→git add→git commit→git push -
多人协作流程
- 拉取最新代码:
git pull origin main - 创建功能分支:
git checkout -b feature-xxx - 开发并提交:
git add && git commit - 推送分支:
git push origin feature-xxx - 合并分支(通过 PR/MR)或本地合并:
git checkout main && git merge feature-xxx
- 拉取最新代码:
-
Bug 修复流程
- 从主分支创建修复分支:
git checkout -b fix-xxx main - 修复后合并回主分支和开发分支:
git merge fix-xxx main && git merge fix-xxx develop
- 从主分支创建修复分支:
四、进阶技巧
-
**变基(Rebase)**用于线性化提交历史,避免合并产生的分叉:
bash
运行
git checkout feature-xxx git rebase main -
**交互式变基(Interactive Rebase)**整理提交历史(合并、修改、删除提交):
bash
运行
git rebase -i HEAD~3 # 编辑最近3个提交 -
**暂存(Stash)**临时保存工作区修改:
bash
运行
git stash # 暂存 git stash pop # 恢复最近暂存 git stash list # 查看暂存列表 -
**子模块(Submodule)**管理依赖的子项目:
bash
运行
git submodule add <子仓库URL> <路径> git submodule update --init --recursive # 克隆子模块 -
别名配置简化常用命令:
bash
运行
git config --global alias.st status git config --global alias.co checkout
五、常见问题与解决方案
-
冲突解决
- 合并 / 拉取时冲突:手动编辑冲突文件 →
git add→git commit - 使用可视化工具(如 VS Code、SourceTree)辅助解决冲突。
- 合并 / 拉取时冲突:手动编辑冲突文件 →
-
忘记提交文件
bash
运行
git add <遗漏文件> git commit --amend # 追加到最后一次提交 -
误删分支 通过
git reflog找到分支最后提交的哈希,重建分支:bash
运行
git checkout -b <分支名> <提交哈希>
六、学习资源推荐
- 官方文档:Git Documentation
- 交互式教程:Learn Git Branching
- 书籍:《Pro Git》(Scott Chacon)