# 嵌入式組Git工作流程及操作指南
## 一、版本號(hào)定義
項(xiàng)目版本號(hào)定義由 x . y . z 三位組成
x:一代產(chǎn)品始終為1
y:發(fā)版到用戶(hù)手中的序號(hào)
z:0-49 用來(lái)解release分支中的bug用,50-99用來(lái)在master分支做需求用
舉例1(release 解bug分支版本號(hào) = 1.1.6):
基于發(fā)版到用戶(hù)手中的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分支:在該分支上開(kāi)發(fā)新的需求。
注:該分支上的版本號(hào)1.y.z 中z只能為50-99
release_1_y_0分支:當(dāng)新開(kāi)發(fā)的需求滿(mǎn)足當(dāng)期開(kāi)發(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)需要開(kāi)發(fā)某個(gè)大型需求,周期較長(zhǎng)時(shí),需要基于master分支再單獨(dú)拉一個(gè)分支開(kāi)發(fā),待穩(wěn)定后合入master分支。
## 三、Git開(kāi)發(fā)習(xí)慣約束
1,為了盡量避免多人開(kāi)發(fā)時(shí)合代碼引起的風(fēng)險(xiǎn),在相應(yīng)的分支開(kāi)發(fā)時(shí)需定時(shí)和遠(yuǎn)端git 倉(cāng)庫(kù)同步,可采用fetch+rebase(或pull)方式。
2,善于利用.gitignore文件,屏蔽由IDE工作產(chǎn)生的臨時(shí)文件,原則上git倉(cāng)庫(kù)只跟蹤源代碼文件。
3,盡量使用git命令行方式,避免使用GUI客戶(hù)端。
## 四、Git開(kāi)發(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)端倉(cāng)庫(kù)生成ssh公鑰
ssh-keygen -t rsa -C "zhangqiang" //生成密鑰文件
cat ~/.ssh/id_rsa.pub //將輸出的密鑰內(nèi)容復(fù)制到遠(yuǎn)端倉(cāng)庫(kù)中即可
(4)如果遠(yuǎn)端已有倉(cāng)庫(kù),克隆到本地
git clone git@code.aliyun.com:zhangqiang/example.git
(5)如果遠(yuǎn)端沒(méi)有倉(cāng)庫(kù),需要在本地建立倉(cāng)庫(kù)并同步至遠(yuǎn)端
1,首先在遠(yuǎn)端建立一個(gè)倉(cāng)庫(kù),例如倉(cāng)庫(kù)地址為:
??????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次提交之前,以此類(lèi)推,回退到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推送到線(xiàn)上
git tag -d test_tag //本地刪除tag
(11)切換到分支A開(kāi)發(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)來(lái)修改。
(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)需要切換到其他分支開(kāi)發(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開(kāi)始創(chuàng)建新分支,需加上新分支名字,如下:
git checkout commit_id -b NewBranchName