git命令上

第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 GPLcommit id1094adb...法精,于是就可以指定回到未來的某個版本:

$ 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

git版本回退

改為指向add distributed

git版本回退

然后順便把工作區(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)行版本的回退

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蟀给,隨后出現(xiàn)的幾起案子蝙砌,更是在濱河造成了極大的恐慌,老刑警劉巖跋理,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件择克,死亡現(xiàn)場離奇詭異,居然都是意外死亡前普,警方通過查閱死者的電腦和手機(jī)肚邢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拭卿,“玉大人骡湖,你說我怎么就攤上這事〖桥” “怎么了勺鸦?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長目木。 經(jīng)常有香客問我换途,道長,這世上最難降的妖魔是什么刽射? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任军拟,我火速辦了婚禮,結(jié)果婚禮上誓禁,老公的妹妹穿的比我還像新娘懈息。我一直安慰自己,他們只是感情好摹恰,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布辫继。 她就那樣靜靜地躺著怒见,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姑宽。 梳的紋絲不亂的頭發(fā)上遣耍,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音炮车,去河邊找鬼舵变。 笑死,一個胖子當(dāng)著我的面吹牛瘦穆,可吹牛的內(nèi)容都是我干的纪隙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扛或,長吁一口氣:“原來是場噩夢啊……” “哼绵咱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起告喊,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤麸拄,失蹤者是張志新(化名)和其女友劉穎派昧,沒想到半個月后黔姜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蒂萎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年秆吵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片五慈。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡纳寂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泻拦,到底是詐尸還是另有隱情毙芜,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布争拐,位于F島的核電站腋粥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏架曹。R本人自食惡果不足惜隘冲,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绑雄。 院中可真熱鬧展辞,春花似錦、人聲如沸万牺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至覆旱,卻和暖如春已脓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背通殃。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工度液, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人画舌。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓堕担,卻偏偏與公主長得像,于是被迫代替她去往敵國和親曲聂。 傳聞我的和親對象是個殘疾皇子霹购,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容