天天看點

GIT分支管理和常用指令

分支管理

GIT分支管理和常用指令

分支管理

master 分支

不能往master 分支上送出代碼,隻能在該分支上進行代碼合并操作,例如将其它分支的代碼合并到 Master 分支上。

develop 分支

我們日常開發中的代碼需要從 master 分支拉一條 develop 分支出來,該分支所有人都能通路,但一般情況下,我們也不會直接在該分支上送出代碼,代碼同樣是從其它分支合并到 develop 分支上去。

feature 分支

當我們需要開發某個特性時,需要從 develop 分支拉出一條 feature 分支,例如 feature/update_mq 與 feature/update_netty,在這些分支上并行地開發具體特性。

release 分支

當特性開發完畢後,我們決定需要釋出某個版本了,此時需要從 develop 分支上拉出一條 release 分支,例如 release-1.0.0,并将需要釋出的特性從相關 feature 分支一同合并到 release 分支上,随後将針對 release 分支推送到測試環境,測試工程師在該分支上做功能測試,開發工程師在該分支上修改 bug。待測試工程師無法找到任何 bug 時,我們可将該 release 分支部署到預發環境,再次驗證以後,均無任何 bug,此時可将 release 分支部署到生産環境。

tag

待上線完成後,将 release 分支上的代碼同時合并到 develop 分支與 master 分支,并在 master 分支上打一個 tag,例如 v1.0.0。

hotfix

當生産環境發現 bug 時,我們需要從對應的 tag 上(例如 v1.0.0)拉出一條 hotfix 分支(例如 hotfix-1.0.1),并在該分支上做 bug 修複。待 bug 完全修複後,需将 hotfix 分支上的代碼同時合并到 develop 分支與 master 分支。同時在master上打上tag,v1.0.1。

版本号

對于版本号我們也有要求,格式為:x.y.z,其中,x 用于有重大重構時才會更新,y 用于有新的特性釋出時才會更新,z 用于修改了某個 bug 後才會更新。

個人分支

個人分支下可以建目錄,例如: xiaoguai/dev1, xiaoguai/dev2

常用指令

git相關配置

# 安裝完Git後第一件要做的事,設定使用者資訊(global可換成local在單獨項目生效):
git config --global user.name "使用者名" # 設定使用者名
git config --global user.email "使用者郵箱"   #設定郵箱
git config --global user.name   # 檢視使用者名是否配置成功
git config --global user.email   # 檢視郵箱是否配置

# 其他檢視配置相關
git config --global --list  # 檢視全局設定相關參數清單
git config --local --list # 檢視本地設定相關參數清單
git config --system --list # 檢視系統配置參數清單
git config --list  # 檢視所有Git的配置(全局+本地+系統)
git config --global color.ui true //顯示git相關顔色           

複制

從遠端倉庫克隆項目到本地

git clone [email protected]:git帳号名/倉庫名.git           

複制

将檔案添加到倉庫

git add 檔案名 # 将工作區的某個檔案添加到暫存區   
git add . # 将目前工作區的所有檔案都加入暫存區           

複制

将暫存區檔案送出到本地倉庫

git commit -m "送出說明" # 将暫存區内容送出到本地倉庫
git commit -a -m "送出說明" # 跳過緩存區操作,直接把工作區内容送出到本地倉庫           

複制

檢視倉庫目前狀态

git status           

複制

比較檔案異同

git diff # 工作區與暫存區的差異
git diff 分支名 #工作區與某分支的差異,遠端分支這樣寫:remotes/origin/分支名
git diff HEAD  # 工作區與HEAD指針指向的内容差異
git diff 送出id 檔案路徑 # 工作區某檔案目前版本與曆史版本的差異
git diff --stage # 工作區檔案與上次送出的差異
git diff 版本TAG # 檢視從某個版本後都改動内容
git diff 分支A 分支B # 比較從分支A和分支B的差異(也支援比較兩個TAG)
git diff 分支A...分支B # 比較兩分支在分開後各自的改動           

複制

檢視曆史記錄

git log # 檢視所有commit記錄(SHA-A校驗和,作者名稱,郵箱,送出時間,送出說明)
git log -p -次數 # 檢視最近多少次的送出記錄
git log fileName # 檢視某檔案的修改記錄,找背鍋專用           

複制

代碼復原

git reset HEAD^ # 恢複成上次送出的版本
git reset HEAD^^ # 恢複成上上次送出的版本,就是多個^,以此類推或用~次數           

複制

同步遠端倉庫

git push -u origin master           

複制

删除版本庫檔案

git rm 檔案名           

複制

建立分支

git checkout -b dev
-b表示建立并切換分支
上面一條指令相當于一面的二條:
git branch dev # 建立分支
git checkout dev # 切換分支           

複制

檢視分支

git branch           

複制

合并分支

git merge dev # 用于合并指定分支到目前分支
git merge --no-ff -m "merge with no-ff" dev
# 加上--no-ff參數就可以用普通模式合并,合并後的曆史有分支,能看出來曾經做過合并

盡量使用rebase代替merge,好處主要有兩個:
1)rebase操作可以把本地未push的分叉送出曆史整理成直線;
2)rebase的目的是使得我們在檢視曆史送出的變化時更容易,因為分叉的送出需要三方對比。           

複制

删除分支

git branch -d dev           

複制

檢視分支合并圖

git log --graph --pretty=oneline --abbrev-commit           

複制

檢視遠端庫資訊

git remote # -v 顯示更詳細的資訊           

複制

撤消某次送出

git revert HEAD # 撤銷最近的一個送出
git revert 版本号 # 撤銷某次commit           

複制

拉取遠端分支到本地倉庫

git checkout -b 本地分支 遠端分支 # 會在本地建立分支,并自動切換到該分支
git fetch origin 遠端分支:本地分支 # 會在本地建立分支,但不會自動切換,還需checkout
git branch --set-upstream 本地分支 遠端分支 # 建立本地分支與遠端分支的連結           

複制

标簽指令

git tag 标簽 # 打标簽指令,預設為HEAD
git tag # 顯示所有标簽
git tag 标簽 版本号 # 給某個commit版本添加标簽
git show 标簽 # 顯示某個标簽的詳細資訊           

複制

同步遠端倉庫更新

git fetch  origin master # 從遠端擷取最新的到本地,首先從遠端的origin的master主分支下載下傳最新的版本到origin/master分支上,然後比較本地的master分支和origin/master分支的差别,最後進行合并。

git fetch比git pull更加安全           

複制

盡量不要用指令(也看個人習慣)

1)IntelliJ IDEA下配置git

2)Sourcetree 可簡化您與 Mercurial 和 Git 存儲庫的互動,讓您集中精力編寫代碼。通過 Sourcetree 簡單的 Git 圖形使用者界面檢視和管理您的存儲庫。