# 嵌入式組Git工作流程及操作指南
## 一蹂午、版本號(hào)定義
項(xiàng)目版本號(hào)定義由 x . y . z 三位組成
x:一代產(chǎn)品始終為1
y:發(fā)版到用戶手中的序號(hào)
z:0-49 用來解release分支中的bug用裙秋,50-99用來在master分支做需求用
舉例1(release 解bug分支版本號(hào) = 1.1.6):
基于發(fā)版到用戶手中的1.1.0版本release分支乡小,當(dāng)前解bug的版本為1.1.6
舉例2(master 需求主分支版本號(hào) = 1.1.58):
當(dāng)前做需求的的版本號(hào)為1.1.5
## 二猜敢、分支定義
master分支:在該分支上開發(fā)新的需求吐葱。
注:該分支上的版本號(hào)1.y.z 中z只能為50-99
release_1_y_0分支:當(dāng)新開發(fā)的需求滿足當(dāng)期開發(fā)任務(wù)時(shí)第喳,需要拉出一個(gè)release分支糜俗,分支根據(jù)上面的版本號(hào)定義命名,例如:release_1_1_0曲饱,release_1_2_0...等悠抹。后期就需要在該分支上進(jìn)行測(cè)試和Bug修復(fù),直到穩(wěn)定發(fā)版扩淀,最后合入master分支楔敌。
注:該分支上的版本號(hào)1.y.z 中z只能為0-49
feature_xxx分支:當(dāng)需要開發(fā)某個(gè)大型需求,周期較長時(shí)驻谆,需要基于master分支再單獨(dú)拉一個(gè)分支開發(fā)卵凑,待穩(wěn)定后合入master分支庆聘。
## 三、Git開發(fā)習(xí)慣約束
1勺卢,為了盡量避免多人開發(fā)時(shí)合代碼引起的風(fēng)險(xiǎn)伙判,在相應(yīng)的分支開發(fā)時(shí)需定時(shí)和遠(yuǎn)端git 倉庫同步,可采用fetch+rebase(或pull)方式黑忱。
2宴抚,善于利用.gitignore文件,屏蔽由IDE工作產(chǎn)生的臨時(shí)文件杨何,原則上git倉庫只跟蹤源代碼文件酱塔。
3,盡量使用git命令行方式危虱,避免使用GUI客戶端。
## 四唐全、Git開發(fā)操作指南
(1)配置你的git賬號(hào)信息
git config --global user.name "zhangqiang"
git config -global user.email "ucos_hqu@126.com"
(2)查看配置信息
git config --global --list
(3)為遠(yuǎn)端倉庫生成ssh公鑰
ssh-keygen -t rsa -C "zhangqiang" //生成密鑰文件
cat ~/.ssh/id_rsa.pub //將輸出的密鑰內(nèi)容復(fù)制到遠(yuǎn)端倉庫中即可
(4)如果遠(yuǎn)端已有倉庫埃跷,克隆到本地
git clone git@code.aliyun.com:zhangqiang/example.git
(5)如果遠(yuǎn)端沒有倉庫,需要在本地建立倉庫并同步至遠(yuǎn)端
1邮利,首先在遠(yuǎn)端建立一個(gè)倉庫弥雹,例如倉庫地址為:
??????git@code.aliyun.com:zhangqiang.qiang/test.git
2,在本地做如下操作:
??????git init
??????git remote add origin git@code.aliyun.com:zhangqiang.qiang/test.git
??????git add .
??????git commit -am "message"
??????git push -u origin master
(6)在本地建立分支A延届,并在遠(yuǎn)端也建立分支A
git checkout -b fenzhi-A
git push -u origin fenzhi-A
(7)刪除本地分支和遠(yuǎn)端分支
git branch -d fenzhi-A //刪除本地分支
git push origin --delete fenzhi-A //刪除遠(yuǎn)端分支
(8)從遠(yuǎn)端獲取一個(gè)本地不存在的分支
git fetch
git checkout -b fenzhi-A origin/fenzhi-A
或
git pull origin fenzhi-A:fenzhi-A
或
git checkout --track origin/fenzhi-A
(9)回退
git reset --hard HEAD^ ? ? ? ? //回退到上個(gè)版本的commit剪勿,并刪除當(dāng)前的commit
git reset --hard HEAD~3? ? ? // 回退到前3次提交之前,以此類推方庭,回退到n次提交之前
git reset --hard commit_id? ? // 退到/進(jìn)到 指定commit的sha碼
git push origin HEAD --force? //強(qiáng)推到遠(yuǎn)程
(10)tag命令
git tag //查看tag
git tag test_tag c80f83939a89659e51dc2a5fe183af384233 //在某個(gè)commit 上打tag
git push origin test_tag //本地tag推送到線上
git tag -d test_tag //本地刪除tag
(11)切換到分支A開發(fā)厕吉,并及時(shí)和遠(yuǎn)端同步分支A上新的動(dòng)態(tài)
git checkout fenzhi-A
git fetch
git rebase
(12)配置beyond compare為git的diff和merge工具
找到.gitconfig文件,并加入相應(yīng)內(nèi)容即可械念,具體操作如下圖:
在.gitconfig文件中添加紅色方框內(nèi)的配置信息头朱,配置信息中需根據(jù)你電腦上安裝的beyond compare路徑以及bc版本(1~4)來修改。
(13)使用beyond compare進(jìn)行diff
比較兩次commit的區(qū)別
git difftool --dir-diff b2c15be1f4e6dd0379a617b452
git difftool --dir-diff head
(14)使用beyond compare進(jìn)行merge
當(dāng)merge遇到?jīng)_突時(shí)可執(zhí)行g(shù)it mergetool命令進(jìn)行解沖突
(15)提交工作區(qū)中的改動(dòng)到緩存區(qū)中
git add file_name 或 git add .
(16)commit緩存區(qū)中的修改
git co8ed007cf218a82 62e30196e868bc84b1d3a1569dc127fb9fc13e84
比較上一次的提交和當(dāng)前工作區(qū)的區(qū)別mmit -m “提交信息”
(17)修改上次commit的備注信息
git commit --amend -m " new text"
(18)查看本地分支所追蹤的遠(yuǎn)端分支
git branch -vv
(19)當(dāng)需要切換到其他分支開發(fā)但本地工作區(qū)和緩存區(qū)還未commit時(shí)
git stash //保存工作區(qū)和緩存區(qū)的內(nèi)容到堆棧中
git stash pop //當(dāng)回到該分支時(shí)可用該命令恢復(fù)之前的工作
(20)如果想切換到之前提交的某個(gè)commit id版本去
git checkout commit_id
例:git checkout e0a0ad92215299de14b23197c04e5f570977db89
注意:如果需從當(dāng)前分支某一個(gè)commit開始創(chuàng)建新分支龄减,需加上新分支名字项钮,如下:
git checkout commit_id -b NewBranchName