Git分支管理完全指南:从创建到合并与冲突解决
目录
1. Git分支基础概念
主分支与子分支
2. 分支查看与切换
查看当前分支
3. 分支创建与管理
本地分支操作
4. 文件提交与分支关系
5. 分支合并策略
本地有分支的情况
本地没有远程分支的情况
6. 分支冲突解决
解决方案
7. Git Stash:临时保存工作现场
8. 最佳实践建议
1. Git分支基础概念
在Git版本控制系统中,分支是开发过程中不可或缺的部分,它允许开发者在不影响主代码的情况下进行功能开发或问题修复。
主分支与子分支
- master分支:主分支,通常代表项目的稳定版本
- 子分支:从主分支或其他分支派生出来的分支,用于特定功能开发或问题修复
2. 分支查看与切换
查看当前分支
# 查看当前所在分支(HEAD指向当前分支)
git log# 另一种查看当前分支的方法
cat .git/HEAD# 查看所有分支
git branch# 查看包括远程分支在内的所有分支
git branch -a
3. 分支创建与管理
本地分支操作
# 创建并切换到新分支
git checkout -b 分支名# 仅创建分支
git branch 分支名# 切换分支
git checkout 分支名# 切换到最近使用的分支
git checkout -# 删除分支(-D强制删除)
git branch -d 分支名
注意事项:
- 不能删除当前所在的分支
- 不能删除未合并或已发生变化的分支
- 创建分支时,子分支会包含主分支当前的所有内容
4. 文件提交与分支关系
文件在不同分支间的可见性规则:
- 未提交的修改:所有分支都能看到状态(假象)
- 已提交到特定分支:仅在提交的分支上可见
- 暂存区(add)但未提交:所有分支都能看到状态
# 将文件添加到暂存区
git add .# 提交到本地仓库
git commit -m '注释'# 推送到远程主分支
git push# 推送到特定远程分支
git push origin 分支名
5. 分支合并策略
本地有分支的情况
# 切换到主分支
git checkout master# 合并指定分支到当前分支
git merge 分支名# 推送到远程仓库
git push
本地没有远程分支的情况
# 拉取远程分支信息
git pull# 在master分支下拉取特定远程分支
git pull origin 分支名# 常规拉取
git pull# 推送主分支
git push origin master
6. 分支冲突解决
当多个分支修改同一文件的不同部分时,合并会产生冲突。
典型场景:
- dev1修改文件并提交
- dev2修改同一文件的不同部分并提交
- 尝试合并这两个分支时出现冲突
解决方案
-
在正确分支上合并并修改
- 合并后手动解决冲突(保留正确内容,删除错误内容)
- 提交修改
- 删除无用的冲突分支(因其内容已不正确)
-
在错误分支上合并并修改
- 合并后手动解决冲突(保留另一分支的正确内容)
- 提交修改
- 此时两分支内容将一致
可视化冲突日志:
git log --graph
7. Git Stash:临时保存工作现场
当需要切换分支但当前修改尚未完成时,可以使用stash功能临时保存工作进度。
# 将当前修改存入堆栈
git stash# 包含未跟踪文件
git stash -u# 查看堆栈中的保存项
git stash list# 恢复最近的stash并删除堆栈记录
git stash pop
特点:
- 使用stash后,git status看不到修改状态
- 修改内容暂时不可见
- 可在适当分支上恢复stash内容
8. 最佳实践建议
- 分支命名:使用有意义的名称,如feature/login、bugfix/navbar等
- 频繁合并:定期将主分支变更合并到开发分支,减少冲突
- 小步提交:小而频繁的提交更容易管理和解决冲突
- 清理分支:合并后及时删除不再需要的分支
- 使用pull request:在团队协作中,通过PR进行代码审查后再合并