目錄:
1凭戴、Git沖突處理
2杉武、Git合并的遞歸策略合并模式
3胳赌、Git分支管理策略
穿越:【目錄】每次吃一點(diǎn)Android_Git版本管理
1鲫惶、Git沖突處理
1.1. 沖突產(chǎn)生
借著模擬沖突產(chǎn)生的情景鳖孤,從新建項(xiàng)目到提交到Github,整個(gè)流程復(fù)習(xí)一遍吧绪颖。
- 1秽荤、在Github上創(chuàng)建同名倉庫
- 2、在本地新建安卓AS工程菠发,添加
README.md
文件王滤,寫入項(xiàng)目描述。 - 3、本地工程目錄下打開bash缚窿,并執(zhí)行以下操作冰悠。
# 初始化git
git init
# 將工程目錄下的所有內(nèi)容都添加提交到master分支
git add .
git commit -m "origin project"
# 添加遠(yuǎn)程版本倉庫
git remote add origin git@github.com:elspet/My_MVP_App.git
# 將內(nèi)容提交到遠(yuǎn)程版本庫
git pull origin master
git push origin master
注意:如果在github上新建倉庫時(shí)同時(shí)生成了README.md文件,然后本地又自己新增一個(gè)README.md胜榔,pull時(shí)會(huì)出現(xiàn)以下錯(cuò)誤,須得刪除一個(gè)再提交。
提交成功后悠抹,github有了對(duì)應(yīng)的文件內(nèi)容。
- 4扩淀、上方已完成工程版本管理的基本構(gòu)建楔敌,接下來模擬沖突
# 新建一個(gè)分支
git checkout -b bran_one
# 在該分支下修改README.md文件內(nèi)容,并添加提交到分支
vim README.md
git add README.md
git commit -m "modified README file content."
# 切換到master分支下修改README.md文件內(nèi)容驻谆,并添加提交到分支
git checkout master
vim README.md
git add README.md
git commit -m "modified README file content."
#將bran_one分支的內(nèi)容合并到master分支
git merge bran_one
執(zhí)行完畢報(bào)出沖突:
1.2. 解決沖突
- 1卵凑、先看下沖突內(nèi)容:
git status
提示我們兩個(gè)分支各自都修改了README.md文件,所以沖突了胜臊。
- 2勺卢、再看下README.md現(xiàn)在的內(nèi)容
cat README.md
可以看到HEAD下面一行是master分支修改的內(nèi)容,bran_one上面一行是bran_one分支修改的內(nèi)容象对。
- 3黑忱、修改README.md的內(nèi)容,并添加提交到分支
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文件,已經(jīng)同步更新了冠绢。
- 5危虱、快速解決沖突:
# 使用我們修改的內(nèi)容
git checkout ours README.md
# 使用對(duì)方的內(nèi)容
git checkout theirs README.md
2. Git合并的遞歸策略合并模式
在《每次吃一點(diǎn)Android_Gitの二》一文中提到的分支合并我們用的是:
git merge branchname
這種默認(rèn)的命令模式稱為Fast Forward模式,特點(diǎn)是合并后沒有合并記錄唐全。
這里要說的是另外一種合并模式:Merge made by recursive 遞歸策略式合并埃跷,特點(diǎn)是會(huì)保留合并記錄蕊玷,格式如下:
git merge --no-ff -m "merge lisa branch 2 master branch" lisa
那么,做個(gè)練習(xí)鞏固鞏固
# 新建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 "
# 切換到上一級(jí)分支
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分支管理策略
那么應(yīng)用到實(shí)際的團(tuán)隊(duì)項(xiàng)目開發(fā)過程中垃帅,git也有一些相應(yīng)的使用規(guī)范。
大體上將分支分成三個(gè)大類:
- master 該分支上的代碼是穩(wěn)定的剪勿,每個(gè)版本都是一個(gè)可發(fā)行的版本贸诚,如App 1.0正式上線的版本。
- dev 分支是開發(fā)的主分支厕吉,每個(gè)人在自己的分支上修改后再提交到該分支上
- 如lisa分支酱固,專屬每個(gè)人開發(fā)的獨(dú)立分支,每個(gè)人在自己的分支上進(jìn)行修改头朱,然后提交到dev分支上运悲。
全流程再走一遍:
# 首先新建一個(gè)文件夾,對(duì)git進(jìn)行初始化
git init
# 將遠(yuǎn)程庫中的My_MVP_App工程克隆到本地
git clone git@github.com:elspet/My_MVP_App.git
# 進(jìn)入工程里面
cd My_MVP_App
# 查看遠(yuǎn)程倉庫的分支
git branch -a
# 將遠(yuǎn)程倉庫分支獲取到本地
git checkout -b dev origin/dev
# 或者
git fetch origin dev_originname:dev_localname
# 新建個(gè)人分支: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
# 假設(shè)現(xiàn)在Jimbo同學(xué)也在做自己的部分
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
# 準(zhǔn)備上線班眯,提交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