Git(讀音爲/gɪt/。)是一個開源的分佈式版本控制系統,能夠有效、高速的處理從很小到很是大的項目版本管理。 Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。git
Git是分佈式版本控制系統,那麼它就沒有中央服務器的,每一個人的電腦就是一個完整的版本庫,因此,工做的時候就不須要聯網了,由於版本庫都是在本身的電腦 上。如今每一個人的電腦都有一個完整的版本庫,那多我的如何協做呢?好比說本身在電腦上改了文件A,其餘人也在電腦上改了文件A,這時,大家兩之間只需把各自的修改推送給對方,就能夠互相看到對方的修改了。數據庫
主要有以下特色:緩存
1. 版本控制
2. 分佈式
3. 工做過程是將服務器上的代碼下載到本地,本地開發完成後,在提交到服務器端服務器
git相比於svn功能更加的強大,命令也不少。本篇博客將詳細介紹一些經常使用命令的使用操做。curl
1.git是分佈式的,svn是集中式的。(最核心)分佈式
2.git是每一個歷史版本都存儲完整的文件,便於恢復,svn是存儲差別文件,歷史版本不可恢復。(核心)svn
3.git可離線完成大部分操做,svn則不能。測試
4.git有着更優雅的分支和合並實現。this
5.git有着更強的撤銷修改和修改歷史版本的能力url
6.git速度更快,效率更高。
基於以上區別,git有了很明顯的優點,特別在於它具備的本地倉庫。
工做目錄是對項目的某個版本獨立提取出來的內容。這些從 Git 倉庫的壓縮數據庫中提取出來的文件,放在磁盤上供你使用或修改。
是一個文件,保存了下次將提交的文件列表信息,通常在 Git 倉庫目錄中。有時候也被稱做`‘索引’',不過通常說法仍是叫暫存區域。
是Git 用來保存項目的元數據和對象數據庫的地方。這是 Git 中最重要的部分,從其它計算機克隆倉庫時,拷貝的就是這裏的數據。
基本的 Git 工做流程以下:
在工做目錄中修改文件 > 暫存文件,將文件的快照放入暫存區域 > 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。
若是 Git 目錄中保存着的特定版本文件,就屬於已提交狀態。若是做了修改並已放入暫存區域,就屬於已暫存狀態。若是自上次取出後,做了修改但尚未放到暫存區域,就是已修改狀態。
第一種安裝方式:yum進行安裝
[root@ken ~]# yum install git -y
第二種安裝方式:編譯安裝
第一步:上傳安裝包並解壓
[root@ken ~]# rz [root@ken ~]# ls | grep git git-v2.7.4.zip [root@ken ~]# unzip git-v2.7.4.zip
第二步:安裝依賴
[root@ken git-2.7.4]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y
第三步:進入解壓下目錄下並執行編譯
[root@ken git-2.7.4]# make prefix=/usr/local/git all [root@ken git-2.7.4]# make prefix=/usr/local/git install
第四步:導入二進制程序
[root@ken git-2.7.4]# rm -rf /usr/bin/git [root@ken git-2.7.4]# ln -s /usr/local/git/bin/git /usr/bin/git [root@ken git-2.7.4]# git --version git version 2.7.4
第一步:建立一個目錄,並進入
[root@ken ~]# mkdir /kenken
[root@ken ~]# cd /kenken
第二步:初始化目錄
[root@ken kenken]# git init
第三步:建立一個測試文件
[root@ken kenken]# echo "this is ken">>a.tt
第四步:提交
[root@ken kenken]# git add a.tt [root@ken kenken]# git commit -m "v1"
第五步:查看
[root@ken kenken]# git log commit 15370fed2791ba4c978018f840caed22fd38221f Author: ken <1614833@qq.com> Date: Tue Nov 20 10:17:18 2018 +0800 v1
第六步:往測試文件裏面追加數據
[root@ken kenken]# echo "new data" >>a.tt
第七步:提交
[root@ken kenken]# git add a.tt [root@ken kenken]# git commit -m "v2"
第八步:再次查看
[root@ken kenken]# git log commit d1f52146b390c95c614e8ae7acc922da0f7e2d0d Author: ken <1614833@qq.com> Date: Tue Nov 20 10:34:11 2018 +0800 v2 commit 15370fed2791ba4c978018f840caed22fd38221f Author: ken <1614833@qq.com> Date: Tue Nov 20 10:17:18 2018 +0800 v1
第九步:恢復到第v1版本
[root@ken kenken]# git reset --hard HEAD~1 HEAD is now at 15370fe v1 [root@ken kenken]# git log commit 15370fed2791ba4c978018f840caed22fd38221f Author: ken <1614833@qq.com> Date: Tue Nov 20 10:17:18 2018 +0800 v1
第十步:恢復到v2版本
[root@ken kenken]# git reflog #首先使用git reflog能夠查看commit值 15370fe HEAD@{0}: reset: moving to HEAD~1 d1f5214 HEAD@{1}: commit: v2 15370fe HEAD@{2}: reset: moving to HEAD~1 22d39cb HEAD@{3}: commit: v2 15370fe HEAD@{4}: commit (initial): v1 [root@ken kenken]# git reset --hard d1f5214 #恢復的時候指定conmit值 HEAD is now at d1f5214 v2 [root@ken kenken]# git log #查看發現已經恢復到v2版本 commit d1f52146b390c95c614e8ae7acc922da0f7e2d0d Author: ken <1614833@qq.com> Date: Tue Nov 20 10:34:11 2018 +0800 v2 commit 15370fed2791ba4c978018f840caed22fd38221f Author: ken <1614833@qq.com> Date: Tue Nov 20 10:17:18 2018 +0800 v1
第一步:建立一個文件
[root@ken kenken]# echo "test1">>e.tt
[root@ken kenken]# echo "test2">>e.tt
第二步:把這個文件添加到緩存區
[root@ken kenken]# git add e.tt
第三步:在文件追加內容
在包含.git的目錄中,只要當前目錄下的文件有修改都會自動進入工做區
因此下面當往文件e.tt中添加test3的時候。e.tt這個文件就進入到了工做區了
1.文件進入工做區:包含.git隱藏文件的目錄中,文件修改就會自動進入
2.文件進入緩存區:git add .
3.文件進入倉庫:git commit -m 'v1'
[root@ken kenken]# echo "test3">>e.tt
第四步:查看工做區
[root@ken kenken]# git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: e.tt # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: e.tt #
第五步:撤銷工做區的內容
使用命令git checkout -- filename便可進行回滾
[root@ken kenken]# git checkout -- e.tt #數據回滾 [root@ken kenken]# git status #查看狀態 # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: e.tt # [root@ken kenken]# cat e.tt #查看文件內容,發現test3內容已經沒有了 test1 test2
第一步:建立文件並進行提交
[root@ken kenken]# echo "1111">k.tt [root@ken kenken]# git add k.tt [root@ken kenken]# git commit -m "k.tt" [root@ken kenken]# git log commit c5f46907ce0dfd6722b091fa7a7053ff48507ace Author: ken <1614833@qq.com> Date: Tue Nov 20 12:42:30 2018 +0800 k.tt
第二步:修改文件並加入到緩存區中
第一步必定要提交,才能看到效果
[root@ken kenken]# echo "222">>k.tt [root@ken kenken]# echo "333">>k.tt [root@ken kenken]# git add k.tt [root@ken kenken]# git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: k.tt #
第三步:緩存區進行回退
[root@ken kenken]# git reset HEAD k.tt
Unstaged changes after reset:
M k.tt
第四步:緩存區進行回退
[root@ken kenken]# git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: k.tt # no changes added to commit (use "git add" and/or "git commit -a")
第五步:工做區進行回滾
其實如今就已經回到了演示2中了
回退完成以後能夠發現以前寫的222和333 已經沒有了
[root@ken kenken]# git checkout -- k.tt [root@ken kenken]# git status # On branch master nothing to commit, working directory clean [root@ken kenken]# cat k.tt 1111
第一步:查看歷史版本
咱們如今處於k.tt中,如今但願回到v3中
[root@ken kenken]# git log commit c5f46907ce0dfd6722b091fa7a7053ff48507ace Author: ken <1614833@qq.com> Date: Tue Nov 20 12:42:30 2018 +0800 k.tt commit ec9c03a48c816aa08fdd2216effdd2f124f1b4e3 Author: ken <1614833@qq.com> Date: Tue Nov 20 12:40:07 2018 +0800 v4 commit 1334466fd86ba0ba4ec95147809d71cb21345e95 Author: ken <1614833@qq.com> Date: Tue Nov 20 12:28:11 2018 +0800 v3 commit 15370fed2791ba4c978018f840caed22fd38221f Author: ken <1614833@qq.com> Date: Tue Nov 20 10:17:18 2018 +0800 v1
第二步:查看所須要回滾的版本的commit值
經過上面咱們能夠看到v3的commit值爲1334466fd86ba0ba4ec95147809d71cb21345e95
第三步:執行回滾操做
commit值沒有必要所有寫出來,只要寫一部分就能夠了
[root@ken kenken]# git reset --hard 1334466f
第四步:查看版本狀態
如今咱們處於v3版本之中
[root@ken kenken]# git log commit 1334466fd86ba0ba4ec95147809d71cb21345e95 Author: ken <1614833@qq.com> Date: Tue Nov 20 12:28:11 2018 +0800 v3 commit 15370fed2791ba4c978018f840caed22fd38221f Author: ken <1614833@qq.com> Date: Tue Nov 20 10:17:18 2018 +0800 v1
第五步:回退到v4版本中
咱們知道回退版本須要用到commit值
可是如今經過git log已經看不到v4的commit值了,如今怎麼辦吶?
能夠經過git reflog查看全部的歷史操做
找到v4前面的值便可
[root@ken kenken]# git reflog 1334466 HEAD@{0}: reset: moving to 1334466f c5f4690 HEAD@{1}: commit: k.tt ec9c03a HEAD@{2}: commit: v4 1334466 HEAD@{3}: commit: v3 15370fe HEAD@{4}: reset: moving to HEAD~1 d1f5214 HEAD@{5}: reset: moving to d1f5214 15370fe HEAD@{6}: reset: moving to HEAD~1 d1f5214 HEAD@{7}: commit: v2 15370fe HEAD@{8}: reset: moving to HEAD~1 22d39cb HEAD@{9}: commit: v2 15370fe HEAD@{10}: commit (initial): v1
第六步:回滾到v4版本
[root@ken kenken]# git reset --hard ec9c03a HEAD is now at ec9c03a v4 [root@ken kenken]# git log commit ec9c03a48c816aa08fdd2216effdd2f124f1b4e3 Author: ken <1614833@qq.com> Date: Tue Nov 20 12:40:07 2018 +0800 v4 commit 1334466fd86ba0ba4ec95147809d71cb21345e95 Author: ken <1614833@qq.com> Date: Tue Nov 20 12:28:11 2018 +0800 v3 commit 15370fed2791ba4c978018f840caed22fd38221f Author: ken <1614833@qq.com> Date: Tue Nov 20 10:17:18 2018 +0800 v1
幾乎全部的版本控制系統都以某種形式支持分支。 使用分支意味着你能夠把你的工做從開發主線上分離開來,以避免影響開發主線。
Git 處理分支的方式可謂是難以置信的輕量,建立新分支這一操做幾乎能在瞬間完成,而且在不一樣分支之間的切換操做也是同樣便捷。 與許多其它版本控制系統不一樣,Git 鼓勵在工做流程中頻繁地使用分支與合併,哪怕一天以內進行許屢次。
第一步:查看分支
*表示當前所處的分支位置
[root@ken kenken]# git branch
* master
第二步:建立分支
[root@ken kenken]# git branch ken
[root@ken kenken]# git branch
ken
* master
第三步:切換分支
[root@ken kenken]# git checkout ken
Switched to branch 'ken' [root@ken kenken]# git branch * ken master
第四步:在分支裏面操做e.tt
[root@ken kenken]# ls
a.tt c.tt d.tt e.tt
[root@ken kenken]# echo "888888">>e.tt [root@ken kenken]# cat e.tt test1 test2 test3 test4 test5 888888
第五步:提交
git add .表示提交所有
[root@ken kenken]# git add .
[root@ken kenken]# git commit -m "test for branch" [ken b621584] test for branch 1 file changed, 1 insertion(+)
第六步:切換回主分支並查看文件
如今查看e.tt並無看到剛纔子分支提交的內容
[root@ken kenken]# git checkout master
Switched to branch 'master' [root@ken kenken]# git branch ken * master [root@ken kenken]# cat e.tt test1 test2 test3 test4 test5
第七步:合併子分支
合併以後發現如今主分支也能夠看到剛纔子分支添加的內容了
[root@ken kenken]# git merge ken
Updating ec9c03a..b621584
Fast-forward e.tt | 1 + 1 file changed, 1 insertion(+) [root@ken kenken]# cat e.tt test1 test2 test3 test4 test5 888888