Git詳細教程
分布式版本控制系統--git
一.什麽是Git
1.Git是什麽
Git是目前世界上最先進的分布式版本控制系統(沒有之一)。
實際上版本控制系統有如下幾個:
1) CVS
2) SVN
3) Git
這個概念中有兩個疑問:
1. 什麽是版本控制
2.什麽是分布式?
2.為什麽需要Git
大家熟悉的一個場景:論文
類似的場景,在軟件開發中更為普遍。
分組完成項目的時候
1)多人協作,是如何完成的?
2)開發自己的任務的時候,從寫第一行代碼開始到整個結束,有沒有來回修改?
如何來解決這些問題呢?
早期,在項目規模還沒有那麽大的時候,大家制定一些規則,手動解決就行。
隨著軟件和項目規模的增大,這種手動方式,效率太低,問題太多,不能滿足開發的需求。
需要有相應的工具來解決 --- 於是就出現了 版本控制系統。
1)CVS,功能比較弱,現在很少使用
2)SVN,功能比較完善,使用比較多
3)Git,功能最強大的,也是最受歡迎的。
所以,版本控制可以幫助我們實現兩件事情:
1)自動記錄每次的修改,並且可以方便的切換到任一版本
2)可以完成多人協作開發
3.Git和GitHub有何區別
Git,是一個版本控制系統,實際上是一個工具,大多數都是基於命令行的。
GitHub,是一個使用Git作為版本控制的托管代碼的網站,平臺。
重點在於學習Git本身。
二.快速入門
1.安裝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
命令行窗口
2.使用流程
基本的使用流程如下:
1)初始化一個Git倉庫(git init)
2)設置用戶名和郵箱
3)添加文件到倉庫(git add 文件名
4) 提交 (git commit -m 說明文字)
5)查看版本 (git log)
6)回退 (git reset --hard HEAD^/commit_id)
(1).初始化一個Git倉庫(git init)
首先,需要指定我們的項目目錄,比如此處放在project目錄下,
使用git init 來初始化一個Git倉庫。
在當前目錄下打開 git bash 窗口,輸入git init命令,如下:
repository: 倉庫
相應的,會在當前目錄下,創建一個隱藏的.git目錄,
我們在開發的時候,是不能去動這個目錄的。
如下:
(2).設置用戶名和郵箱
使用
git config user.name 用戶名
git config user.email 郵箱
(3).添加文件到倉庫(git add 文件名1 文件名2 )
我們需要在project目錄下,開始開發。
使用 git add 文件名,將其添加到版本庫
(4).提交 (git commit -m 說明文字)
使用git add只是將其添加到git 的暫存區,需要使用git commit進行提交,同時必須要加上說明文字。
(5).查看版本 (git log)
接下來,需要重復3~5。
比如,我新建一個base.css文件,將其引入到 index.html中,所以,又需要add
再次commit
(6).回退 (git reset --hard HEAD^/commit_id)
第三天開發,發現需要回到第一個版本
使用 git reset --hard HEAD^會退到上一個版本。
我又後悔,需要再回到第二個版本。這是當前版本的未來版本,必須使用commit_id來reset。
回退如下:
此時,就已經切換到第二個版本。
三.Git基本概念及原理
1.基本概念
在使用git的時候,通常會提到如下幾個術語:
1)工作區
2)版本庫
3) 暫存區
4)分支
當我們使用git init命令初始化倉庫的時候,創建一個隱藏的目錄---- .git。
這個文件夾將我們的項目目錄一分為二:
1.版本庫(倉庫)
2.工作區
1)凡是在.git目錄中的,都是屬於版本庫的
2)凡是在.git目錄之外的,都是屬於工作區的。
我們的項目目錄
一旦我們創建了版本庫,在開發的時候,就不能對版本庫目錄做任何的操作。
我們開發的操作都是在工作區進行的,新建、修改、刪除都是在工作區進行的。
也就是說,我們的常規開發都是在工作區進行的。
對於工作區的內容,其實就是我們常規的和項目相關的文件和文件夾。
對於版本庫,還需要進一步的去看看裏面有什麽東西。
版本庫,又一分為二:
1) 暫存區
2)主分支
暫存區:stage,臨時保存文件的一個區域,就相當於是一個中轉站。工作區中的任何內容都是需要通過暫存區,才能提交真正的分支上去。
主分支:master,它才是保存各個版本的地方
2.基本原理
理解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.多人協作
此處,討論都是針對個人的版本控制。
1.git config
用戶獲取/設置git的一些配置。
獲取git的配置,使用 git config --list
我們重點關註的就只有 用戶名和郵箱的一個設置。
git config user.name 用戶名
git config user.email 郵箱名
如果需要設置全局的,可以加 --global
如果是第一次安裝 git,user.name 和 user.email是沒有的,所以需要設置一下。
2.git init
用於初始化一個版本庫。
可以用兩種方式來初始化
1.先創建一個目錄,在這個目錄下,使用git init命令
2.直接使用 git init 項目名稱,初始化
不管是哪種方式,都會在 項目目錄下,新建一個.git目錄,該目錄就是 版本庫,這個目錄是隱藏,也不允許用戶進行任何的操作。需要對版本庫進行操作,使用命令操作即可。
3.git add
作用:將文件從 工作區 添加到 版本庫的 暫存區。
格式:git add 文件名1 文件名2 文件3
此處,也可以添加文件夾。
查看狀態,如下:
4.git commit
作用:將所有文件一次性從暫存區 提交給 主分支,才會形成一個版本。
格式:git commit -m 說明文字
一旦commit,就會將其提交個主分支,形成一個新的版本,同時會將暫存區清空。
在使用的時候,需要註意的一個問題 ---- 必須要添加說明文字。
添加說明文字有兩種方式:
1)使用 -m 參數 (推薦)
2)進入vi編輯器,然後編輯
如果在git commit的時候,沒有加上 -m ,就會進入vi編輯器,如圖:
在vi編輯器中,兩種種模式:
1)輸入模式,允許用戶輸入內容
2)命令模式,可以執行相關的一些命令
默認進來是一個命令模式,切換到輸入模式,按下 i,就可以輸入相應的說明文字。
按下ESC鍵,就退出輸入模式,進入命令模式。
如果想保存退出,需要輸入 :wq
推薦大家使用-m參數來添加說明文字。
5.git status
作用:查看版本庫的狀態,重點就是暫存區。
格式:git status
重點就是 讀懂不同的情況下的說明信息:
6.git reset
作用:用於切換到某一個版本
格式: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情況。
Git詳細教程