目录:
1、Git冲突处理
2、Git合并的递归策略合并模式
3、Git分支管理策略
参考资料:Git教程 - 廖雪峰的官方网站
1、Git冲突处理
1.1. 冲突产生
借着模拟冲突产生的情景,从新建项目到提交到Github,整个流程复习一遍吧。
- 1、在Github上创建同名仓库
- 2、在本地新建安卓AS工程,添加
README.md
文件,写入项目描述。 - 3、本地工程目录下打开bash,并执行以下操作。
# 初始化git
git init
# 将工程目录下的所有内容都添加提交到master分支
git add .
git commit -m "origin project"
# 添加远程版本仓库
git remote add origin git@github.com:elspet/My_MVP_App.git
# 将内容提交到远程版本库
git pull origin master
git push origin master
注意:如果在github上新建仓库时同时生成了README.md文件,然后本地又自己新增一个README.md,pull时会出现以下错误,须得删除一个再提交。
提交成功后,github有了对应的文件内容。
- 4、上方已完成工程版本管理的基本构建,接下来模拟冲突
# 新建一个分支
git checkout -b bran_one
# 在该分支下修改README.md文件内容,并添加提交到分支
vim README.md
git add README.md
git commit -m "modified README file content."
# 切换到master分支下修改README.md文件内容,并添加提交到分支
git checkout master
vim README.md
git add README.md
git commit -m "modified README file content."
#将bran_one分支的内容合并到master分支
git merge bran_one
执行完毕报出冲突:
1.2. 解决冲突
- 1、先看下冲突内容:
git status
提示我们两个分支各自都修改了README.md文件,所以冲突了。
- 2、再看下README.md现在的内容
cat README.md
可以看到HEAD下面一行是master分支修改的内容,bran_one上面一行是bran_one分支修改的内容。
- 3、修改README.md的内容,并添加提交到分支
vim README.md
git add README.md
git commit -m "resloved README file conflict"
- 4、查看版本日志
git log --graph --pretty=oneline --abbrev-commit
再切换到bran_one分支下,查看README.md文件,已经同步更新了。
- 5、快速解决冲突:
# 使用我们修改的内容
git checkout ours README.md
# 使用对方的内容
git checkout theirs README.md
2. Git合并的递归策略合并模式
在《每次吃一点Android_Gitの二》一文中提到的分支合并我们用的是:
git merge branchname
这种默认的命令模式称为Fast Forward模式,特点是合并后没有合并记录。
这里要说的是另外一种合并模式:Merge made by recursive 递归策略式合并,特点是会保留合并记录,格式如下:
git merge --no-ff -m "merge lisa branch 2 master branch" lisa
那么,做个练习巩固巩固
# 新建lisa分支
git checkout -b lisa
# 在lisa分支下修改README.md文件,并添加提交到分支
vim README.md
git add README.md
git commit -m "modified README.md file on lisa branch "
# 切换到上一级分支
git checkout dev
# 采用递归策略合并方式将lisa的修改合并到dev分支中
git merge --no-ff -m "merge lisa branch 2 dev branch" lisa
通过git log --graph --pretty=oneline --abbrev-commit
指令查看提交日志:
3. Git分支管理策略
那么应用到实际的团队项目开发过程中,git也有一些相应的使用规范。
大体上将分支分成三个大类:
- master 该分支上的代码是稳定的,每个版本都是一个可发行的版本,如App 1.0正式上线的版本。
- dev 分支是开发的主分支,每个人在自己的分支上修改后再提交到该分支上
- 如lisa分支,专属每个人开发的独立分支,每个人在自己的分支上进行修改,然后提交到dev分支上。
全流程再走一遍:
# 首先新建一个文件夹,对git进行初始化
git init
# 将远程库中的My_MVP_App工程克隆到本地
git clone git@github.com:elspet/My_MVP_App.git
# 进入工程里面
cd My_MVP_App
# 查看远程仓库的分支
git branch -a
# 将远程仓库分支获取到本地
git checkout -b dev origin/dev
# 或者
git fetch origin dev_originname:dev_localname
# 新建个人分支:lisa
git checkout -b lisa
# 修改README.md文件
vim README.md
# 添加并提交到lisa分支
git add README.md
git commit -m "modified on lisa branch 15:17"
# 切换到dev分支,合并lisa分支到dev分支
git checkout dev
git merge --no-ff -m "merge lisa 2 dev with no-ff mode" lisa
# 查看合并记录
git log --graph --pretty=oneline --abbrev-commit
# 假设现在Jimbo同学也在做自己的部分
git checkout -b jimbo
vim README.md
git add README.md
git commit -m "modified on jimbo branch 15:21"
git checkout dev
git merge --no-ff -m "merge jimbo 2 dev with no-ff mode" jimbo
# 准备上线,提交dev上最终版本到master分支上
git checkout master
git merge --no-ff -m "release 1.0 version to master branch" dev
# 在master分支上看所有的版本记录
git log --graph --pretty=oneline --abbrev-commit