[Tool] Git 使用 與 Git Flow

Never、C發表於2017-06-26

目錄

簡介

  • Git是目前世界上最先進的分散式版本控制系統(沒有之一)。
  • Linus花了兩週時間自己用C寫了一個分散式版本控制系統,這就是Git!一個月之內,Linux系統的原始碼已經由Git管理了!
  • 很遺憾,接觸2年+的Git,今天才稍微深入分析。

命令

  • git config

    • 配置git
    • git config --global user.name "Never、C" // 配置使用者名稱
    • git config --global user.email cao@never.cn // 配置郵箱
  • git init

    • 建立版本庫
  • git status

    • 檢視 工作區(untracked) 和 暫存區(stage) 狀態
    • git status -s // 精簡模式檢視
  • git add

    • git add . | git add --all // 新增當前所有修改到暫存區
  • git reset

    • git reset HEAD . // 將暫存區檔案移除,不修改檔案本身內容
    • git reset --hard xx // 還原到歷史提交記錄
    • git reset --merge // 撤銷本次合併
    • git reset --hard HEAD^ // 回到上個版本,會修改檔案內容
  • git commit

    • 提交到版本庫
    • git commit -m xx // 帶註釋提交
  • git checkout

    • 從xx處檢出檔案
    • git checkout -- . // 將工作區檔案還原為暫存區中最近的內容(暫存區無,則與版本庫一致)
    • git checkout xx // 切換到分支xx
    • git checkout -b xx // 建立並切換到分支xx
  • git log

    • 檢視歷史記錄
    • git log --oneline // 單行顯示git記錄
    • git reflog // 檢視'未來'操作
  • git merge

    • 合併分支
    • git merge xx // 從xx分支合併到當前分支
  • git stash

    • 儲藏
    • git stash pop // 恢復儲藏的修改
    • git stash list // 顯示stash列表
  • git tag

    • 版本標籤
    • git tag // 檢視版本所有標籤
    • git tag -m "xx" v1.0 // 建立版本為1.0的標籤,註釋為xx
  • git revert

    • 回到歷史
    • git revert xx // 生成新的提交來回到歷史記錄xx的父級
  • git push

    • 推送到遠端版本庫
    • git push --tags // 版本庫推送到遠端庫上
  • git rm

    • git rm --cached
      • git rm --cached -r . // 清空暫存區
  • git rebase

    • git merge 會生成一個新得合併節點,而rebase不會
  • git fsck

    • 檢查當前版本庫資訊是否存在錯誤

工作流

  • 簡介

    • 軟體開發模型有常見的瀑布模型、迭代開發模型、以及最近出現的敏捷開發模型等不同的模型。
    • Git Flow重點解決的是由於原始碼在開發過程中的各種衝突導致開發活動混亂的問題。
  • 分支

    • Git Flow模型中定義了主分支和輔助分支兩類分支。
    • 主分支
      • 主分支是所有開發活動的核心分支。所有的開發活動產生的輸出物最終都會反映到主分支的程式碼中。主分支分為master分支和development分支。
      • master
        • master分支上存放的應該是隨時可供在生產環境中部署的程式碼(Production Ready state)。當開發活動告一段落,產生了一份新的可供部署的程式碼時,master分支上的程式碼會被更新。同時,每一次更新,最好新增對應的版本號標籤(TAG)。
      • develop
        • develop分支是儲存當前最新開發成果的分支。通常這個分支上的程式碼也是可進行每日夜間釋出的程式碼(Nightly build)。因此這個分支有時也可以被稱作“integration branch”。
      • 規範
        • 僅在釋出新的可供部署的程式碼時才更新master分支上的程式碼
        • 每當有程式碼提交到master分支時,我們可以使用Git Hook觸發軟體自動測試以及生產環境程式碼的自動更新工作。
    • 輔助分支
      • 輔助分支主要用於組織軟體新功能的並行開發、簡化新功能開發程式碼的跟蹤、輔助完成版本釋出工作以及對生產程式碼的缺陷進行緊急修復工作。這些分支與主分支不同,通常只會在有限的時間範圍記憶體在。
      • 輔助分支包括:
        • 用於開發新功能時所使用的feature分支;
        • 用於輔助版本釋出的release分支;
        • 用於修正生產程式碼中的缺陷的hotfix分支。
      • feature(topic分支)
        • 從develop分支發起
        • 合併回develop分支 或 被拋棄
        • 命名:feature-*
        • 該分支可以儲存在開發者自己的版本庫,不強制要求在主版本庫中。
      • release
        • 從develop分支派生
        • 合併回develop 或 master分支
        • 命名:release-*
        • 用於釋出新的產品,允許小的修正,準備釋出說明資訊。透過在release分支處理,可以讓develop分支空閒出來。
      • hotfix
        • 從master分支派生
        • 合併回master 或 develop分支
        • 命名:hotfix-*
        • 當生產環境遇到異常或嚴重問題,從master指定的tag派生hotfix分支修復。能夠讓負責新功能和bug修復人員並行工作。
  • 下載

相關文章