隨着團隊中開發工程師數量增長,由原來一個工程師負責一個前端項目逐步轉變成由多人同時開發一個項目。最近在項目開發過程當中發如今項目版本管理的Git倉儲中對分支管理以及分支Commit信息存在些許不規範狀況,故此跟你們分享下Git中的一些原理和使用技巧。前端
1、聊下GIt倉儲的結構,包括:本地工做區、暫存區、本地倉庫、遠程倉庫副本以及遠程倉庫。git
例如,從咱們天天早晨到工位到晚上下班從公司出發回家來舉例說明:github
一、首先到單位的第一件事兒是測試
git checkout featurefetch
// 本地項目切換到feature分支,此操做實際上是將HEAD指針指向feature分支網站
二、從遠端拉取最新Code3d
git pull origin feature指針
// 此pull 操做本質上是個複合操做,包含執行:git fetch + git merge origin feature 兩個操做,會自動從遠端倉庫拉取Code同時copy在遠程倉庫中再和本地代碼進行和合並cdn
三、天天開發前的準備工做完畢後,開始根據排期進行項目開發,項目開發完畢後,開始提交Codeblog
git add
// 此操做是將本地工做區的Code添加到暫存區(index stage)
git commit
// 此操做是將暫存區的代碼添加到本地倉庫(local repository)
git push
// 此操做是將本地倉庫中的代碼推送到遠程倉庫(包括:遠程倉庫、遠程倉庫副本)
四、滿心歡喜下班回家
上述流程總結成流程圖,以下:
由第一部分的「Git流程圖」中咱們能夠發現,git pull 指令其實執行的是兩個指令,一般咱們說這種指令是複合指令,包含的指令以下:
一、git fetch
二、git merge
其中,git fetch 指令是將遠程倉儲中的Code 推送到遠程倉庫副本的地方;git merge origin feature是將遠程倉庫副本的代碼與本地倉庫中代碼進行合併。在平時開發中,若是你的項目是多人協做的,儘可能少用pull,而是採用fetch + merge的方式。
3、git merge、git merge --no-ff 與 git rebase 的區別
當咱們的feature分支代碼開發完,QA測試完畢後須要和主幹代碼進行合併,若是你的項目是一人獨立負責能夠忽略此部分。可是在不少狀況下一個項目是由多人共同維護,此時至關於master 主幹分支和你本身維護的feature分支都在同時前進,此時在合併代碼時或多或少存在代碼衝突;不只如此,feature分支的提交歷史記錄和master主幹分支團隊其餘人提交的記錄都會不只是一條,在此狀況下得代碼合併,不少人都是直接執行以下代碼:
一、git checkout master
二、git merge feature
三、git push
此種合併分支代碼的方式在項目維護人員很少或僅本身在維護時比較適用;可是在多人員維護代碼時不適用可是能夠依舊以此應用,只是會對master主幹分支的歷史提交記錄混亂,在後期master主幹分支出現問題須要回滾代碼時帶來些許代價。所以,有些多人維護項目的團隊中會約定使用git rebase 進行代碼合併。那麼,接下來和你們分享下git merge 、git merge --no-ff 與 git rebase的區別。
git merge、git merge --no-ff 與 git rebase的區別 4、git reset、git revert 與git checkout 之間的區別
前面咱們梳理了
git pull與git fetch的區別
git merge 、git merge --no-ff與git rebase的區別
相信你們已經很是清晰了可以以最優方式在本身團隊中使用Git經常使用的代碼拉取、代碼合併的指令,可是天有不測風雲,你們雖不指望但總會出現一些重大問題須要對代碼進行回滾。那麼,和你們分享下代碼回滾的git reset、git revert以及git checkout 以前的區別。
git reset 是將當前分支的HEAD指向歷史的某個特定提交,空餘出的提交記錄會在git下次執行垃圾回收的時候刪除掉。
git revert 實際上是將想要回滾的版本代碼當作一次新的修改代碼進行提交,之前的間隔版本依然存在
git checkout 在提交層面上是用來切換分支,在文件層面是來捨棄工做區的更改
總結,以下:
詳細你們在經過上面的描述已經對Git經常使用的拉取代碼、合併代碼、回滾代碼有必定理解,有問題你們能夠在評論區進行討論。
最後,和你們分享下我比較喜歡的Git Tip網站: github.com/k88hudson/g…