第2節(jié):git命令
git初識配置
- 檢驗git安裝是否成功:git bash中運(yùn)行
git --version
驗證安裝是否成功
設(shè)置git參數(shù)
- 顯示當(dāng)前的git配置:
git config --list
- 設(shè)置提交倉庫時的用戶名信息:
git config --global user.name "username"
- 設(shè)置提交倉庫時的郵箱信息:
git config --global user.email "email"
創(chuàng)建版本庫
什么是版本庫呢?版本庫又名倉庫缎脾,英文名repository,你可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起來氛驮,每個文件的修改俱萍、刪除讯检,Git都能跟蹤,以便任何時刻都可以追蹤歷史菠齿,或者在將來某個時刻可以“還原”。
創(chuàng)建一個版本庫的步驟
首先坐昙,選擇一個合適的地方绳匀,創(chuàng)建一個空目錄:
$ mkdir learngit
$ cd learngit
$ pwd
/c/Users/FUZIWANG/Desktop/webcode/git/learngit
第二步,通過git init
命令把這個目錄變成Git可以管理的倉庫:
$ git init
InitiInitialized empty Git repository in C:/Users/FUZIWANG/Desktop/webcode/git/learngit/.git/
alized empty Git repository in /Users/michael/learngit/.git/
瞬間Git就把倉庫建好了炸客,而且告訴你是一個空的倉庫(empty Git repository)疾棵,可以發(fā)現(xiàn)當(dāng)前目錄下多了一個.git
的目錄,這個目錄是Git來跟蹤管理版本庫的痹仙,沒事千萬不要手動修改這個目錄里面的文件是尔,不然改亂了,就把Git倉庫給破壞了开仰。
第三步拟枚,把文件添加到版本庫
現(xiàn)在我們編寫一個readme.txt
文件,內(nèi)容如下:
Git is a version control system.
Git is free software.
文件添加到git倉庫的步驟
第一步众弓,用命令git add
告訴Git恩溅,把文件添加到倉庫:
$ git add readme.txt
執(zhí)行上面的命令,沒有任何顯示谓娃,說明添加成功暴匠。
第二步,用命令git commit
告訴Git傻粘,把文件提交到倉庫:
$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
簡單解釋一下git commit
命令每窖,-m
后面輸入的是本次提交的說明,可以輸入任意內(nèi)容弦悉,當(dāng)然最好是有意義的窒典,這樣你就能從歷史記錄里方便地找到改動記錄。
git commit
命令執(zhí)行成功后會告訴你稽莉,1 file changed
:1個文件被改動(我們新添加的readme.txt文件)瀑志;2 insertions
:插入了兩行內(nèi)容(readme.txt有兩行內(nèi)容)。
監(jiān)視文件變動
我們已經(jīng)成功地添加并提交了一個readme.txt
文件,現(xiàn)在劈猪,是時候繼續(xù)工作了昧甘,于是,我們繼續(xù)修改readme.txt文件战得,改成如下內(nèi)容:
Git is a distributed version control system.
Git is free software.
現(xiàn)在充边,運(yùn)行git status
命令看看結(jié)果:
$ 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: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
git status
命令可以讓我們時刻掌握倉庫當(dāng)前的狀態(tài),上面的命令輸出告訴我們常侦,readme.txt
被修改過了浇冰,但還沒有準(zhǔn)備提交的修改。
雖然Git告訴我們readme.txt
被修改了聋亡,但如果能看看具體修改了什么內(nèi)容肘习,需要用git diff
這個命令看看:
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
git diff
顧名思義就是查看difference,顯示的格式正是Unix通用的diff格式坡倔,可以從上面的命令輸出看到漂佩,我們在第一行添加了一個distributed
單詞。
知道了對readme.txt
作了什么修改后罪塔,再把它提交到倉庫就放心多了投蝉,提交修改和提交新文件是一樣的兩步,第一步是git add
:
$ git add readme.txt
同樣沒有任何輸出垢袱。在執(zhí)行第二步git commit
之前墓拜,我們再運(yùn)行git status
看看當(dāng)前倉庫的狀態(tài):
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: readme.txt
git status
告訴我們,將要被提交的修改包括readme.txt
请契,下一步咳榜,就可以放心地提交了:
$ git commit -m "add distributed"
[master e475afc] add distributed
1 file changed, 1 insertion(+), 1 deletion(-)
提交后,我們再用git status
命令看看倉庫的當(dāng)前狀態(tài):
$ git status
On branch master
nothing to commit, working tree clean
Git告訴我們當(dāng)前沒有需要提交的修改爽锥,而且涌韩,工作目錄是干凈(working tree clean)
的。
版本回退
Git除了可以進(jìn)行修改氯夷,還可以進(jìn)行版本的回退臣樱,每當(dāng)你覺得文件修改到一定程度的時候,就可以“保存一個快照”腮考,這個快照在Git中被稱為commit
雇毫。一旦你把文件改亂了,或者誤刪了文件踩蔚,還可以從最近的一個commit
恢復(fù)棚放,然后繼續(xù)工作,而不是把幾個月的工作成果全部丟失馅闽。
版本控制系統(tǒng)肯定有某個命令可以告訴我們歷史記錄飘蚯,在Git中馍迄,我們用git log
命令查看:
$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:06:15 2018 +0800
append GPL
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file
git log
命令顯示從最近到最遠(yuǎn)的提交日志,我們可以看到3次提交局骤,最近的一次是append GPL
攀圈,上一次是add distributed
,最早的一次是wrote a readme file
峦甩。
如果嫌輸出信息太多赘来,看得眼花繚亂的,可以試試加上--pretty=oneline
參數(shù):
$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
需要友情提示的是穴店,你看到的一大串類似1094adb...
的是commit id
(版本號)
準(zhǔn)備把readme.txt
回退到上一個版本撕捍,也就是add distributed
的那個版本拿穴,怎么做呢泣洞?
首先,Git必須知道當(dāng)前版本是哪個版本默色,在Git中球凰,用HEAD
表示當(dāng)前版本,也就是最新的提交1094adb...
腿宰,上一個版本就是HEAD^
呕诉,上上一個版本就是HEAD^^
,當(dāng)然往上100個版本寫100個^
比較容易數(shù)不過來吃度,所以寫成HEAD~100
甩挫。
現(xiàn)在,我們要把當(dāng)前版本append GPL
回退到上一個版本add distributed
椿每,就可以使用git reset
命令:
$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
看看readme.txt
的內(nèi)容是不是版本add distributed
:
$ cat readme.txt
Git is a distributed version control system.
Git is free software.
還可以繼續(xù)回退到上一個版本wrote a readme file
伊者,不過且慢,然我們用git log
再看看現(xiàn)在版本庫的狀態(tài):
$ git log
commit e475afc93c209a690c39c13a46716e8fa000c366 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file
最新的那個版本append GPL
已經(jīng)看不到了间护!如何再恢復(fù)撤銷的版本亦渗?只要上面的命令行窗口還沒有被關(guān)掉,你就可以順著往上找啊找啊汁尺,找到那個append GPL
的commit id
是1094adb...
法精,于是就可以指定回到未來的某個版本:
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL
版本號沒必要寫全,前幾位就可以了痴突,Git會自動去找搂蜓。當(dāng)然也不能只寫前一兩位,因為Git可能會找到多個版本號辽装,就無法確定是哪一個了帮碰。
再小心翼翼地看看readme.txt
的內(nèi)容:
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git的版本回退速度非常快如迟,因為Git在內(nèi)部有個指向當(dāng)前版本的HEAD
指針收毫,當(dāng)你回退版本的時候攻走,Git僅僅是把HEAD從指向append GPL
:
改為指向add distributed
:
然后順便把工作區(qū)的文件更新了。所以你讓HEAD
指向哪個版本號此再,你就把當(dāng)前版本定位在哪昔搂。
現(xiàn)在,你回退到了某個版本输拇,關(guān)掉了電腦摘符,第二天早上就后悔了,想恢復(fù)到新版本怎么辦策吠?找不到新版本的commit id
怎么辦逛裤?Git提供了一個命令git reflog
用來記錄你的每一次命令:
$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file
從輸出可知,append GPL
的commit id是1094adb
猴抹,現(xiàn)在带族,你又可以根據(jù)新版本的id進(jìn)行版本的回退