Git簡介
Git(全局資訊追蹤器)。
Git是一個分布式版本控制工具,Git的使用中央倉庫不是必須的,使用者本地就是一個完整的版本倉庫,代碼的前進、回退、删除等等操作都可以直接在本地進行,不需要中央倉庫。但是,在實際操作中,為了能夠和其他同僚快速溝通以及合并代碼,一般還是會搭建一個中央倉庫。Git對分支的管理非常友好,可以快速建立或者合并分支。
Svn集中式的版本控制工具,Svn中,必須要有中央倉庫,所有的版本資訊都儲存在中央倉庫中,代碼的前進、回退、删除等等操作都需要在中央倉庫中進行,使用者本地儲存的隻是版本倉庫的一個副本,Svn中的分支非常臃腫。
Git安裝
git在Linux上安裝非常簡單,本文主要講解在windows下的安裝
1.官網下載下傳
https://gitforwindows.org/
安裝
輕按兩下直接安裝,一直預設安裝即可。
安裝成功
安裝後在開始中會出來git相關的菜單
配置個人資訊
安裝成功我們還要完成最後一步設定。設定個人的資訊
git config --global user.name "bobo"
git config --global user.email "[email protected]"
建立版本庫
版本庫也就是我們平常說的倉庫,repository。其實也就是個檔案夾,隻是這個檔案夾被git管理,該檔案夾中的檔案的建立、修改、删除都能夠被追蹤。
建立檔案夾
初始化操作
通過git init指令把這個目錄變成Git可以管理的倉庫,建立成功後在該檔案夾下會多出一個.git的檔案夾。
git init
Git目錄是用來來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄裡面的檔案,不然改亂了,就把Git倉庫給破壞了。
基本操作
添加檔案到版本庫
注意:在window系統中,編輯檔案不要使用記事本操作,因為在操作中文的時候會有問題,推薦用Notpad++,但是編碼方式得設定下。
建立一個普通檔案
執行git add 指令添加到倉庫
git add read.txt
執行上面的指令,沒有任何顯示,這就對了,Unix的哲學是“沒有消息就是好消息”,說明添加成功
執行 git commit 指令送出
$ git commit -m "first commit"
[master (root-commit) 9d37174] first commit
1 file changed, 1 insertion(+)
create mode 100644 read.txt
commit -m的-m後面跟的是本次操作的備注說明資訊。最好是有意義的,也就是下次看到這個說明就清楚送出了什麼内容。
為什麼Git添加檔案需要add,commit一共兩步呢?因為commit可以一次送出很多檔案,是以你可以多次add不同的檔案
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add files"
status和diff指令
正常狀态下執行兩個指令
對read.txt檔案進行修改
hello git
hello git 2
執行status指令
注意: 沒有執行git add指令
$ git status read.txt
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: read.txt
狀态資訊告訴我們read.txt檔案被修改了,但是還沒有被送出。
執行diff指令檢視不同
$ git diff read.txt
warning: LF will be replaced by CRLF in read.txt.
The file will have its original line endings in your working directory
diff --git a/read.txt b/read.txt
index 8d0e412..a11a392 100644
--- a/read.txt
+++ b/read.txt
@@ -1 +1,2 @@
hello git
+hello git 2
通過此指令我們能夠看到增加的是 hello git 2這行資訊,知道了對readme.txt作了什麼修改後,再把它送出到倉庫就放心多了,送出修改和送出新檔案是一樣的兩步
add指令
$ git status read.txt
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: read.txt
git status告訴我們,将要被送出的修改包括readme.txt,下一步,就可以放心地送出了
commit操作
$ git commit -m 'first update file'
[master 27492ed] first update file
1 file changed, 1 insertion(+)
送出後再執行 git commit 指令
$ git status read.txt
On branch master
nothing to commit, working tree clean
Git告訴我們目前沒有需要送出的修改,而且,工作目錄是幹淨(working tree clean)的
小結
版本回退
log指令
剛剛我們對read.txt檔案執行兩次操作,我們還能記得住我們做了什麼操作,但是當我們操作了一段時間後,修改的越來越多,那麼我們就會忘記很多以前的操作。這時我們可以通過log指令來檢視曆史資訊
$ git log read.txt
commit 27492ed2ca522c05a9293a0c48e876a81e795522 (HEAD -> master)
Author: dpb <[email protected]>
Date: Wed Jan 30 20:51:44 2019 +0800
first update file
commit cfe85b8a01fb09583f29f093915c9bb5b788123f
Author: dpb <[email protected]>
Date: Wed Jan 30 20:46:54 2019 +0800
first add file
git log指令顯示從最近到最遠的送出日志,每條日志資訊占了五行記錄,如果日志比較多的情況下。我們可以在指令後添加 –pretty=oneline單行來顯示日志資訊
$ git log --pretty=oneline read.txt
27492ed2ca522c05a9293a0c48e876a81e795522 (HEAD -> master) first update file
cfe85b8a01fb09583f29f093915c9bb5b788123f first add file
提示‘27492ed2ca…’這一長串的資訊既是版本号
為了便于示範又對檔案修改了一次,log有了三次記錄
$ git log read.txt
commit a1d1909f554a531acdec30d96ac67db9047599f8 (HEAD -> master)
Author: dpb <[email protected]>
Date: Wed Jan 30 21:08:42 2019 +0800
third update file
commit 27492ed2ca522c05a9293a0c48e876a81e795522
Author: dpb <[email protected]>
Date: Wed Jan 30 20:51:44 2019 +0800
first update file
commit cfe85b8a01fb09583f29f093915c9bb5b788123f
Author: dpb <[email protected]>
Date: Wed Jan 30 20:46:54 2019 +0800
first add file
現在我們有三個版本即 ‘third update file’,‘first update file’,‘first add file’
檢視目前檔案内容:
$ cat read.txt
hello git
hello git 2
hello git 3
回退到上一個版本
$ git reset --hard HEAD^
HEAD is now at 27492ed first update file
dengp@DESKTOP-2F8A7PB MINGW64 /c/tools/GitResource/gitRepository1 (master)
$ cat read.txt
hello git
hello git 2
dengp@DESKTOP-2F8A7PB MINGW64 /c/tools/GitResource/gitRepository1 (master)
$ git log read.txt
commit 27492ed2ca522c05a9293a0c48e876a81e795522 (HEAD -> master)
Author: dpb <[email protected]>
Date: Wed Jan 30 20:51:44 2019 +0800
first update file
commit cfe85b8a01fb09583f29f093915c9bb5b788123f
Author: dpb <[email protected]>
Date: Wed Jan 30 20:46:54 2019 +0800
first add file
執行以上指令我們發現檔案内容回退到了上一個版本,log中也看不到’third update file’中的資訊了,好像這個版本從來沒有出現過一樣。
回到之前最新版本
$ git reset --hard a1d1909f5
HEAD is now at a1d1909 third update file
dengp@DESKTOP-2F8A7PB MINGW64 /c/tools/GitResource/gitRepository1 (master)
$ cat read.txt
hello git
hello git 2
hello git 3
首先我們發現資訊被我們找回來了,其次‘a1d1909f5’是最新版本的版本号,雖然不全,但是前幾位要正确,git會自動比對
Git的版本回退速度非常快,因為Git在内部有個指向目前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向first update file
回退後
版本回退其實就是指針的改變。有時候我們想要回退到以前的最新版本,這時候log指令檢視不到對應的版本号,在次場景下我們可以通過git reflog來檢視
小結:
HEAD指向的版本就是目前版本,是以,Git允許我們在版本的曆史之間穿梭,使用指令git reset --hard commit_id。
切換前,用git log可以檢視送出曆史,以便确定要回退到哪個版本。
要切換未來,用git reflog檢視指令曆史,以便确定要回到未來的哪個版本。