Git是目前世界上最早進的分佈式版本控制系統(沒有之一)。css
實際上版本控制系統有以下幾個:html
1) CVSgit
2) SVNwindows
3) Gitbash
這個概念中有兩個疑問:編輯器
1. 什麼是版本控制分佈式
2.什麼是分佈式?工具
你們熟悉的一個場景:論文學習
相似的場景,在軟件開發中更爲廣泛。網站
分組完成項目的時候
1)多人協做,是如何完成的?
2)開發本身的任務的時候,從寫第一行代碼開始到整個結束,有沒有來回修改?
如何來解決這些問題呢?
早期,在項目規模尚未那麼大的時候,你們制定一些規則,手動解決就行。
隨着軟件和項目規模的增大,這種手動方式,效率過低,問題太多,不能知足開發的需求。
須要有相應的工具來解決 --- 因而就出現了 版本控制系統。
1)CVS,功能比較弱,如今不多使用
2)SVN,功能比較完善,使用比較多
3)Git,功能最強大的,也是最受歡迎的。
因此,版本控制能夠幫助咱們實現兩件事情:
1)自動記錄每次的修改,而且能夠方便的切換到任一版本
2)能夠完成多人協做開發
Git,是一個版本控制系統,其實是一個工具,大多數都是基於命令行的。
GitHub,是一個使用Git做爲版本控制的託管代碼的網站,平臺。
重點在於學習Git自己。
Git在多個操做系統均有相應的安裝包。
使用windows系統。
仍是一個典型的windows軟件的安裝
官網:https://git-scm.com/downloads/
這個表示加入了windows的path變量,意味着能夠在cmd窗口中使用。
安裝完成以後,咱們能夠在任意目錄下,點擊鼠標右鍵,彈出右鍵菜單,有兩個選項:
1.Git GUI Here
2.Git bash Here
Git GUI here,其實就是一個可視化的界面,使用鼠標就能夠完成相應操做。以下:
Git bash Here
命令行窗口
基本的使用流程以下:
1)初始化一個Git倉庫(git init)
2)設置用戶名和郵箱
3)添加文件到倉庫(git add 文件名1 文件名2 )
4) 提交 (git commit -m 說明文字)
5)查看版本 (git log)
6)回退 (git reset --hard HEAD^/commit_id)
首先,須要指定咱們的項目目錄,好比此處放在project目錄下,
使用git init 來初始化一個Git倉庫。
在當前目錄下打開 git bash 窗口,輸入git init命令,以下:
repository: 倉庫
相應的,會在當前目錄下,建立一個隱藏的.git目錄,
咱們在開發的時候,是不能去動這個目錄的。
以下:
使用
git config user.name 用戶名
git config user.email 郵箱
咱們須要在project目錄下,開始開發。
使用 git add 文件名,將其添加到版本庫
使用git add只是將其添加到git 的暫存區,須要使用git commit進行提交,同時必需要加上說明文字。
接下來,須要重複3~5。
好比,我新建一個base.css文件,將其引入到 index.html中,因此,又須要add
再次commit
第三天開發,發現須要回到第一個版本
使用 git reset --hard HEAD^會退到上一個版本。
我又後悔,須要再回到第二個版本。這是當前版本的將來版本,必須使用commit_id來reset。
回退以下:
此時,就已經切換到第二個版本。
在使用git的時候,一般會提到以下幾個術語:
1)工做區
2)版本庫
3) 暫存區
4)分支
當咱們使用git init命令初始化倉庫的時候,建立一個隱藏的目錄---- .git。
這個文件夾將咱們的項目目錄一分爲二:
1.版本庫(倉庫)
2.工做區
1)凡是在.git目錄中的,都是屬於版本庫的
2)凡是在.git目錄以外的,都是屬於工做區的。
咱們的項目目錄
一旦咱們建立了版本庫,在開發的時候,就不能對版本庫目錄作任何的操做。
咱們開發的操做都是在工做區進行的,新建、修改、刪除都是在工做區進行的。
也就是說,咱們的常規開發都是在工做區進行的。
對於工做區的內容,其實就是咱們常規的和項目相關的文件和文件夾。
對於版本庫,還須要進一步的去看看裏面有什麼東西。
版本庫,又一分爲二:
1) 暫存區
2)主分支
暫存區:stage,臨時保存文件的一個區域,就至關因而一箇中轉站。工做區中的任何內容都是須要經過暫存區,才能提交真正的分支上去。
主分支:master,它纔是保存各個版本的地方
理解Git的關鍵在於 暫存區 的理解。
前面咱們使用Git提交版本的時候,其實分紅了兩步:
1) 使用git add命令
2)使用git commit命令
實際上,咱們在將工做區的文件提交給版本庫的時候,首先是將其添加到 暫存區,而後纔是從暫存區再提交給主分支。
1)git add ,將文件添加到 版本庫的 暫存區。
2)git commit ,將暫存區全部的文件一次性提交個 主分支。
咱們不能直接從工做區到 主分支,必需要通過暫存區。
結合命令再次來看看這個過程。
使用 git status 能夠查看 git版本庫的狀態。
在text項目目錄下,新建一個版本庫,目前工做區沒有任何內容,以下:
使用 git status命令,查看 版本庫的狀態:
在工做區中,新建一個index.html文件,以下:
再次使用 git status查看,以下:
採納它的建議,使用git add命令,將index.html添加到版本庫的暫存區,以下:
再次查看狀態,以下:
說明這個文件,已經被放入暫存區了。
使用git commit 將其從暫存區提交到 主分支,以下:
再次查看狀態:
說明暫存區空了。
能夠參考圖示。
實際上,就是幾個常見命令,包括以下幾個:
1)git config
2)git init
3) git add
4)git commit
5)git status
6)git rese
Git能夠完成兩件事情:
1.版本控制
2.多人協做
此處,討論都是針對我的的版本控制。
用戶獲取/設置git的一些配置。
獲取git的配置,使用 git config --list
咱們重點關注的就只有 用戶名和郵箱的一個設置。
git config user.name 用戶名
git config user.email 郵箱名
若是須要設置全局的,能夠加 --global
若是是第一次安裝 git,user.name 和 user.email是沒有的,因此須要設置一下。
用於初始化一個版本庫。
能夠用兩種方式來初始化
1.先建立一個目錄,在這個目錄下,使用git init命令
2.直接使用 git init 項目名稱,初始化
不論是哪一種方式,都會在 項目目錄下,新建一個.git目錄,該目錄就是 版本庫,這個目錄是隱藏,也不容許用戶進行任何的操做。須要對版本庫進行操做,使用命令操做便可。
做用:將文件從 工做區 添加到 版本庫的 暫存區。
格式:git add 文件名1 文件名2 文件3
此處,也能夠添加文件夾。
查看狀態,以下:
做用:將全部文件一次性從暫存區 提交給 主分支,纔會造成一個版本。
格式:git commit -m 說明文字
一旦commit,就會將其提交個主分支,造成一個新的版本,同時會將暫存區清空。
在使用的時候,須要注意的一個問題 ---- 必需要添加說明文字。
添加說明文字有兩種方式:
1)使用 -m 參數 (推薦)
2)進入vi編輯器,而後編輯
若是在git commit的時候,沒有加上 -m ,就會進入vi編輯器,如圖:
在vi編輯器中,兩種種模式:
1)輸入模式,容許用戶輸入內容
2)命令模式,能夠執行相關的一些命令
默認進來是一個命令模式,切換到輸入模式,按下 i,就能夠輸入相應的說明文字。
按下ESC鍵,就退出輸入模式,進入命令模式。
若是想保存退出,須要輸入 :wq
推薦你們使用-m參數來添加說明文字。
做用:查看版本庫的狀態,重點就是暫存區。
格式:git status
重點就是 讀懂不一樣的狀況下的說明信息:
做用:用於切換到某一個版本
格式:git reset --hard HEAD^ /commit_id
一旦咱們將項目造成多個版本,就可使用git reset切換到任意版本。
一般須要查看當前版本庫的日誌信息。使用git log來查看,以下:
如今就可使用git reset命令回退。
若是是會退到以前的版本,可使用HEAD關鍵字和commit_id。
HEAD^,回退到以前的一個版本
HEAD^^,回退到以前的兩個版本
HEAD^^^,回退到以前的三個版本
若是大於3的話,HEAD^10
更好的方法就是使用 commit_id。
若是須要回退到當前版本的將來版本,必須使用commit_id。若是使用HEAD,會回退到更小的版本。
再回到將來版本時,要分兩種狀況:
我已經使用了git log查看過版本狀況,直接拿到那個commit_id便可。
若是沒有使用git log查看過版本,使用git reflog能夠查看整個commit_id狀況。