每次吃一点Android_Gitの三

目录:
1、Git冲突处理
2、Git合并的递归策略合并模式
3、Git分支管理策略

每次吃一点Android_Gitの三_第1张图片
进击的小仙

穿越:【目录】每次吃一点Android_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 [email protected]:elspet/My_MVP_App.git
# 将内容提交到远程版本库
git pull origin master
git push origin master 

注意:如果在github上新建仓库时同时生成了README.md文件,然后本地又自己新增一个README.md,pull时会出现以下错误,须得删除一个再提交。

每次吃一点Android_Gitの三_第2张图片
Paste_Image.png

提交成功后,github有了对应的文件内容。


每次吃一点Android_Gitの三_第3张图片
Paste_Image.png
  • 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

执行完毕报出冲突:

Paste_Image.png

1.2. 解决冲突

  • 1、先看下冲突内容:
    git status
每次吃一点Android_Gitの三_第4张图片
Paste_Image.png

提示我们两个分支各自都修改了README.md文件,所以冲突了。

  • 2、再看下README.md现在的内容
    cat README.md
每次吃一点Android_Gitの三_第5张图片
Paste_Image.png

可以看到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
每次吃一点Android_Gitの三_第6张图片
Paste_Image.png

再切换到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指令查看提交日志:

每次吃一点Android_Gitの三_第7张图片
Paste_Image.png

3. Git分支管理策略

那么应用到实际的团队项目开发过程中,git也有一些相应的使用规范。
大体上将分支分成三个大类:

  • master 该分支上的代码是稳定的,每个版本都是一个可发行的版本,如App 1.0正式上线的版本。
  • dev 分支是开发的主分支,每个人在自己的分支上修改后再提交到该分支上
  • 如lisa分支,专属每个人开发的独立分支,每个人在自己的分支上进行修改,然后提交到dev分支上。

全流程再走一遍:

# 首先新建一个文件夹,对git进行初始化
git init
# 将远程库中的My_MVP_App工程克隆到本地
git clone [email protected]: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 
每次吃一点Android_Gitの三_第8张图片
Paste_Image.png

你可能感兴趣的:(每次吃一点Android_Gitの三)