无题
Git分支管理
git所有分支之间彼此互不干扰,各自完成各自的工作和内容。可以在分支使用完后合并到总分支(原分支) 上,安全、便捷、不影响其他分支工作;
main分支(以前为master分支)
从项目创建之初,有且唯一的分支就是主分支。如果之后再创建分支,就是一个一个的从分支,主分支被叫做main
HEAD
在 Git 中,它是一个指针,指向当前所在的本地分支;
git创建新分支。即在当前位置创建一个指针,比如起名为 从分支dev,然后将HEAD指向dev。
分支创建好后的提交都是在dev分支上提交,之前的总提交master分支的提交位置停留在创建从分支dev的位置。而HEAD会跟随新创建的分支,跟随每一次提交不停的先前移动。保持HEAD指针的在提交的最前沿。
在master上新创建的dev分支会继承master分支的所有提交,通过 git log 可以看出来;
提交分支
当dev分支
工作完成,需要合并到master分支
的时候,也只是将master指针指向当前dev的位置,并将HEAD指向master,这时dev分支可以直接删除,也可以不删除,删除的话也只是移除了dev指针,只留下一个master指针,对工作区没有任何的影响;
切换回主分支
1 | 分支切换回主分支master |
合并分支
当分支切换回主分支的时候,可以将dev的修改提交合并到master分支上,使用:
1 | 合并dev到master |
1 | 这一次的合并称之为快速合并 fast-forward。只是将master的指针指向了dev最后一次提交的位置。 |
当分支切换回主分支master的时候,就可以删除dev分支使用:
1 | 删除dev分支 |
小结:
1 | 查看分支:git branch |
git commit 冲突情况
1 | 准备新的devm分支,继续我们的新分支开发: |
切换到main分支:
1 | git checkout main |
合并冲突产生
现在,master(main)
分支和feature1
分支各自都分别有新的提交,变成了这样:
这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突
1 | 86159@LAPTOP-AK18IKI3 MINGW64 ~/Desktop/_post (main) |
git status
查看冲突的文件
查看merge.txt的内容:
1 | cat merge.txt |
Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容,将上面内容删除修改如下后保存:
1 | cat merge.txt |
再次提交
查看分支的合并情况
1 | git log --graph --pretty=oneline --abbrev-commit |
分支管理策略
通常,合并分支时,如果没有冲突,并且分支是单向一条线路继承下来的,git会使用 fast forword
模式,但是有些快速合并不能成功,但是又没有冲突时,就会触发分支管理策略,git会自动做一次新的提交。
当两个分支对工作区都进行了修改,但是修改的并不是同一个文件,而是两个不同的文件,也就是不会产生冲突。此时合并的时候,不能使用“快速合并”,就会弹框需要你输入一段合并说明。使用快捷键 ctrl+x 退出
合并时禁止快速合并模式
1 | 合并dev到master,禁止快速合并模式,同时添加说明 |