采用分支来保护远程仓库
Git实现版本管理
首先了解git
的特点:
- 每一次
commit
都会串成一条时间线,时间线就是一条分支(主分支(master
)) HEAD
指向master
,master
指向提交,以此确定当前分支的提交点
具体形式如图:
Git的分支管理
每一次提交代码,master
分支都会向前移动一步。由于HEAD
指向master
所以始终是最新的版本。
由于实际开发中每个人的进度不一样。所以不可能同时很多人对master
分支进行操作。所以需要创建分支进行管理。
Git的创建分支:
*本质上Git
创建分支就是创建一个指针,指向master
分支。新建dev
*分支
git branch dev
切换到新建的分支:
将HEAD
指针的指向从master
改到指向新建的dev
分支
git checkout dev
一个指令完成创建和切换分支的操作:
git checkout -b dev
此时在有任何提交都是在dev
上发生的。master
主分支的指针指向不会改动。
Git的分支合并:
本质:
直接将master
指针的指向知道dev
分支
由于当前我们是在dev
分支下,所以需要切换到master
分支在进行合并
git checkout master
然后将master
的指针指向dev
分支:
git merge dev
# git merge用于合并指定分支到当前分支
此时查看所有分支:
git branch
# 带*的分支就是当前所在分支
指令总结
- 查看分支:
git branch
- 创建分支:
git branch <分支名>
- 同时在本地和远端建立分支:
git checkout -b dev origin/dev
- 切换分支:
git checkout <分支名>
orgit switch <分支名>
- 创建+切换分支:
git checkout -b <name>
或者git switch -c <name>
- 合并某分支到当前分支:
git merge <name>
- 删除分支:
git branch -d <name>
解决冲突
要了解两个点:
- 什么情况下会发生冲突
- 如何解决冲突
场景举例:
# 创建新分支newDev
git checkout -b feature1
# 修改文件后添加到暂存区
git add read.txt
# 提交到版本库
git commit -m "新的提交"
# 切换到主分支
git checkout master
# 在master分支上修改read.txt文件,并提交到版本库
git add read.txt
git commit -m "master分支上的提交"
此时在主分支上的情况是master
分支和feature1
分支都有了新的提交。如图:
此时执行合并代码就会提示存在不同:
git merge feature1
此时通过git status
可以查看状态--->会提示两个分支同时修改的文件
处理步骤:
打开同时修改的文件查看内容--->统一内容以后在保存重新提交到暂存区--->再次提交--->再次合并
Git
用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容
修改好后重新添加到暂存区重新提交到版本库:--->这个操作是在master
分支上
git add read.txt
git commit -m "新的提交"
此时的版本关系是这样的:
此时可以查看分支合并情况:
git log --graph --pretty=online --abbrev-commit
删除feature1
分支:
git branch -d feature1
指令总结
-
当Git无法自动合并分支时,必须首先解决冲突。解决冲突后,再提交,合并完成。
-
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
-
用
git log --graph
命令可以看到分支合并图。