git的分支管理
分支之间彼此互不干扰,各自完成各自的工作和内容,最后再 合并到总分支(原分支) 上,安全、不影响其他分支工作
查看当前工作在那个分支
1 | git branch |
master分支
从项目创建之初,有且唯一的分支就是主分支,之后如果创建分支,就是一个一个的从分支,主分支被叫做master
而HEAD所指向的直接关系是当前分支,再找到分支的版本。如下图:
创建新分支
git创建新分支。即在当前位置创建一个指针,起名为从分支dev,然后将HEAD指向dev。如下图:
- 之后的提交都是在dev分支上提交,在没有总提交master分支之前,master分支位置停留在创建从分支的位置。而HEAD会跟随新创建的分支,跟随每一次提交不停的先前移动
- 新创建的dev分支会继承master分支的所有提交,通过
git log
可以看出来。
1 | 创建并切换到dev分支 |
此时就会有两个分支,并且指向 dev分支
提交分支
当dev分支工作完成,需要合并到master分支的时候,也只是将master指针指向当前dev的位置,并将HEAD指向master,这时dev分支可以直接删除,也可以不删除,删除的话也只是移除了dev指针,只留下一个master指针,对工作区没有热河的影响。
切换回主分支
1 | 分支切换回主分支master |
当分支切换回主分支的时候,可以将dev的修改提交合并到master分支上,使用:
1 | 合并dev到master |
重点:这一次的合并称之为快速合并
fast-forward
。只是将master的指针指向了dev最后一次提交的位置。
当分支切换回主分支master的时候,就可以删除dev分支使用:
1 | 删除dev分支 |
小结:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git breach -d <name>
冲突的发生和解决
当同一个文件被两个分支都修改过、提交后,想要合并两个分支就会产生冲突,不能快速将dev合并到master上。并且git会提醒“合并过程中产生了冲突,请修正后再提交”。
修正的过程
- 将两个分支的文件,进行对比修改,满足两个分支的提交。
- 使用 git add 和git commit 进行一次新的提交。(此时提交的是master分支)
- 再次合并
查看带有冲突解决的日志
1
git log --graph -- pretty=oneline
分支管理策略
通常,合并分支时,如果没有冲突,并且分支是单向一条线路继承下来的,git会使用 fast forword 模式,但是有些快速合并不能成功,但是又没有冲突时,就会触发分支管理策略,git会自动做一次新的提交。
当两个分支对工作区都进行了修改,但是修改的并不是同一个文件,而是两个不同的文件,也就是不会产生冲突。此时合并的时候,不能使用“快速合并”,就会弹框需要你输入一段合并说明。使用快捷键 ctrl+x 退出
合并时禁止快速合并模式
1 | 合并dev到master,禁止快速合并模式,同时添加说明 |
bug分支
描述和说明
使用场景:当在某个分支上正在工作,突然有一个紧急的bug需要修复,此时可以使用 stash
功能,将当前正在工作的现场存储起来
,等bug修复之后,在返回继续工作。
操作顺序:
- 将当前的工作现场临时存储
1 | 对当前现场进行存储 |
- 切换到bug出现的分支上,比如bug出现在
master
分支。如果bug就是在当前分支,可以操作此步骤
1 | git checkout master |
- 新添加一个bug临时分支
1 | git checkout -b bug001 |
- 对代码进行修复。
- 切换回master分支
1 | git checkout master |
- 合并bug分支到主master上
1 | git merge --no-ff -m '合并bug分支到master' bug001 |
- 删除bug001分支
1 | git branch -d bug001 |
- 回到之前的工作现场所在的分支
1 | git checkout dev |
- 查看当前分支保存那些工作现场(之前封冻存储的工作现场)
1 | git stash list |
- 恢复存储的现场
1 | git stash pop |
小结:
修复bug时,通过创建新的bug分支进行修复,然后合并,最后删除。
当手头工作没有做完时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,恢复工作现场。
如果你喜欢这个博客或者觉得它对你有用,欢迎你转发、分享这个博客,让更多的人参与进来。 如果博客中使用的图片侵犯了您的版权,请联系作者删除。 谢谢 !