一.基礎操作
0.基本概念
git持有三棵樹
- 工作目錄持有實體文件
- 暫存區(qū),緩沖改動
- Head 指向最后一次提交結果
1.初始化本地項目
git init
2.檢出項目
git clone <server|path>
3.添加和提交
git add <單文件>
git add *
git commit -m "" # 添加注釋并提交到HEAD
4.本地倉庫與遠端建立|刪除聯(lián)系
git remote add origin <遠端倉庫地址>
git remote rm origin
5.推送提交的改動到遠程服務器
git push origin <branch>
6.分支檢出|刪除
- 檢出
git checkout -b feature/test # 檢出新分支并跳轉
git checkout <切換分支>
- 刪除
git branch -d <分支> #需要切換到其他分支
git push origin --delete <遠程分支名稱>
7.拉去遠程代碼變更
git pull
8.合并分支
git merge <branch>
9.查看分支差異
git diff <source_branch> <target_branch>
10.創(chuàng)建標簽
git tag <1.0.0|tag> <commit id>
11.查看提交歷史
git log
git log --author=bob # 指定提交人
git log --pretty=oneline # 沒個提交只占一行輸出
git log --graph --oneline --decorate --all
git log --name-status # 改變的文件
git log --help # help doc
12.后悔藥
- 使用Head區(qū)的代碼,替換掉本地文件的改動
git checkout -- <filename>
- 將遠程的代碼拉取到本地,確認后手動合并
git fetch <origin>
- 放棄本地所有提交
git reset --hard origin/master
- 撤回commit修改,但是代碼不回滾
git reset --soft HEAD^ # HEAD^,HEAD~1 上次 , HEAD~2 兩次
- 回滾版本,代碼回滾
git reset --hard HEAD^ #回退到上個版本
git reset --hard HEAD~3 #回退到前3次提交之前,以此類推,回退到n次提交之前
git reset --hard <commit_id> # 退到/進到 指定commit的sha碼
git push origin HEAD --force # 由于本地HEAD版本低于master版本提交需要強制才能成功
13.ignore文件
在根目錄下添加.gitignore文件
# 忽略*.o和*.a文件
*.[oa]
# 忽略*.b和*.B文件,my.b除外
*.[bB]
!my.b
# 忽略dbg文件和dbg目錄
dbg
# 只忽略dbg目錄,不忽略dbg文件
dbg/
# 只忽略dbg文件,不忽略dbg目錄
dbg
!dbg/
# 只忽略當前目錄下的dbg文件和目錄,子目錄的dbg不在忽略范圍內
/dbg
# 以'#'開始的行,被視為注釋.
* ?:代表任意的一個字符
* *:代表任意數(shù)目的字符
* {!ab}:必須不是此類型
* {ab,bb,cx}:代表ab,bb,cx中任一類型即可
* [abc]:代表a,b,c中任一字符即可
* [ ^abc]:代表必須不是a,b,c中任一字符
二.git flow 工作流
1.初始化
git flow init
git flow init -f
2.特性|功能 feature - 可以有多個
- 增加新特性- 基于develop分支創(chuàng)建一個feature/xxx
git flow feature start MYFEATURE
- 完成新特性
合并 MYFEATURE 分支到 'develop'
刪除這個新特性分支
切換回 'develop' 分支
git flow feature finish MYFEATURE
- 發(fā)布新特性 -推送到遠端
git flow feature publish MYFEATURE
- 拉取功能分支
git flow feature pull origin MYFEATURE
git flow feature track MYFEATURE # 跟蹤
- 發(fā)布版本基于develop生產(chǎn)環(huán)境的release - 只能有一個
- 創(chuàng)建
git flow release start RELEASE [BASE]
- 完成
歸并 release 分支到 'master' 分支
用 release 分支名打 Tag
歸并 release 分支到 'develop'
移除 release 分支
git flow release finish RELEASE [BASE]
- 發(fā)布
git flow release publish RELEASE
- 簽出
git flow release track RELEASE
- 緊急修復-hotfix-唯一
- 創(chuàng)建補丁
git flow hotfix start VERSION [BASENAME] # [BASENAME]為finish release時填寫的版本號
- 完成
當完成緊急修復分支,代碼歸并回 develop 和 master 分支。
master 分支打上修正版本的 TAG。
git flow hotfix finish VERSION