來源:Git由淺入深之操作與指令
作者:驚鴻三世(轉(zhuǎn)載已獲得原作者許可茧泪,如需轉(zhuǎn)載請與原作者聯(lián)系)
本篇正式開始介紹Git的基礎(chǔ)操作與原理清笨,看完本篇业稼,你應(yīng)該知道如何使用Git進行一次基礎(chǔ)的版本控制伏钠,包括:Git倉庫的生成和獲取横漏,添加和忽略版本控制對象;暫存熟掂,查看缎浇,緩存,變更赴肚;查看和查找提交歷史素跺;格式化歷史記錄輸出;刪除和移動Git倉庫內(nèi)對象誉券。
獲取Git倉庫(Git repository)
使用Git的第一步是要獲取一個Git倉庫指厌,我們使用Git的操作對象都是存放在Git倉庫里,獲取Git倉庫的方式有兩種:
- 導(dǎo)入一個項目或目錄到Git踊跟,初始化(init)生成Git倉庫踩验;
- 從遠程服務(wù)器克隆(clone)一個Git倉庫商玫。
初始化倉庫(init)
若我們需要使用一個項目或目錄生成一個Git倉庫箕憾,只需要通過命令行進入該目錄,執(zhí)行如下Git指令:
git init
此操作將在此目錄生成一個.git子目錄决帖,該目錄包含整個倉庫結(jié)構(gòu)厕九,即倉庫的所有文件;同時會檢出(checkout)一個默認工作分支地回,通常名為master扁远。
此時,我們只是初始化生成了一個Git倉庫刻像,還未添加需要進行版本控制的對象–文件或目錄畅买。
克隆倉庫(clone)
很多時候,我們需要從遠程服務(wù)器獲取一個已存在的Git倉庫细睡,我們只需要使用如下指令:
git clone https://github.com/codingplayboy/javascript_notes
git clone后面跟著的url就是已存在的Git倉庫地址谷羞,我們需要知道的是Git克隆是對服務(wù)器上倉庫的一次近乎完整的數(shù)據(jù)拷貝,當(dāng)前倉庫項目的所有文件及其各版本歷史都會被獲取。
執(zhí)行如上指令后湃缎,會在當(dāng)前目錄創(chuàng)建一個javascript_notes目錄并在javascript_notes中初始化一個.git子目錄犀填,拉取倉庫的所有數(shù)據(jù),然后根據(jù)倉庫(或項目)的最新版本檢出(check out)一個工作分支嗓违,通常該分支默認名稱為master九巡。
倉庫別名
我們克隆一個Git倉庫時,其默認名還是倉庫名蹂季,但是也支持我們自定義本地別名:
git clone https://github.com/codingplayboy/javascript_notes js_notes
執(zhí)行如上指令冕广,會克隆一個倉庫,并導(dǎo)入到當(dāng)前目錄下的js_notes目錄偿洁。
倉庫Url
Git倉庫Url支持的協(xié)議有很多撒汉,最常見的是https://
和git@
;還有使用SSH傳輸協(xié)議的涕滋,形如git://
或者user@server:path/xxx/repository.git
睬辐。
版本控制對象
在上節(jié),我們已經(jīng)知道如何獲取一個Git倉庫宾肺,但是到目前為止也僅僅是存在一個倉庫溉委,我們進行版本控制的對象(文件或目錄)并沒有添加進倉庫。
工作目錄及其內(nèi)對象的狀態(tài)
相關(guān)指令:git status
當(dāng)我們獲取一個倉庫爱榕,如克隆一個遠端倉庫后,在倉庫目錄執(zhí)行上面指令坡慌,如圖所示:
- 圖中第一行
on branch master
告訴我們當(dāng)前我們處在名為master的分支黔酥; - 第二行
up-to-date with 'origin/master'
說明目前分支與遠程倉庫的master分支保持同步最新版本; - 第三行
working directory clean
說明目前倉庫中沒有新加或修改過的對象(文件或目錄)洪橘。
關(guān)于控制對象的狀態(tài)(git status)
在當(dāng)前工作目錄的文件或目錄跪者,可能出于兩種狀態(tài):
- 已標(biāo)記(tracked)
所謂已標(biāo)記文件或目錄,即那些在Git最新快照里存在的對象熄求,可能是未修改(unmodified)渣玲,已修改(modified)或暫存(staged)的文件或目錄。
- 未標(biāo)記(untracked)
未標(biāo)記對象弟晚,即除去已標(biāo)記對象外忘衍,所有對象,比如在工作目錄下但是未包含在最新快照里并且不在暫存區(qū)(staging area)卿城。
可以想象一下枚钓,當(dāng)?shù)谝淮慰寺∫粋€遠程倉庫后,倉庫下的所有文件都應(yīng)該是處于已標(biāo)記(tracked)但是未修改的狀態(tài)瑟押。
添加對象(git add)
添加版本控制對象的指令是git add
搀捷,比如,我們可以使用如下指令添加一個README.txt文件多望,當(dāng)然我們首先需要在倉庫目錄下嫩舟,創(chuàng)建該文件(任意方式創(chuàng)建)氢烘,查看狀態(tài):
如上圖,顯示README.txt文件為Untracked file家厌,并且提示:use git add to track;
然后使用git add指令后:
git add README.txt
再次執(zhí)行g(shù)it status指令:
如上播玖,出現(xiàn):Changes to be committed,說明該文件已被標(biāo)記(tracked)且被暫存,我們可以進行提交了。
當(dāng)然該指令還可以對目錄使用:
git add test/
如上指令像街,將添加該test目錄及其內(nèi)所有文件或子目錄黎棠。
最后,也許我們希望一次添加所有變更镰绎,而不是一個一個添加脓斩,如下指令,可以實現(xiàn):
git add .
我們還需要關(guān)注git add指令畴栖,不只是能添加版本控制對象随静,還有以下功能:
- 暫存變更(staged)
- 標(biāo)記沖突已解決(resolved)
git add指令,更貼切的作用應(yīng)該是添加新內(nèi)容(文件/目錄/變更)到下一次提交吗讶,即將新內(nèi)容加入最新快照燎猛,等待提交;
關(guān)于后兩點功能照皆,后文有詳細介紹重绷。
忽略對象(.gitignore)
有時候,我們并不希望對倉庫內(nèi)所有對象(文件或目錄)進行管理膜毁,某些開發(fā)依賴或本地調(diào)試使用文件和目錄昭卓,我們不需要在團隊間共享,這些文件應(yīng)該被Git忽略瘟滨,我們只需要創(chuàng)建一個.gitignore文件候醒,在此文件中列出希望被忽略的文件或目錄,如:
.gitignore
文件語法主要如下:
- 以行為單位杂瘸,一行匹配一個條件
- 空行或以#開頭的行會被忽略
- 表達式支持glob格式
- 排除某表達式匹配項在該表達式前加!;
暫存變更(git add)
在添加README.txt
文件后倒淫,我們可以對其進行修改,如在該文件加入一行文字http://blog.codingplayboy.com
败玉,然后執(zhí)行git status
指令敌土,結(jié)果如下:
發(fā)現(xiàn),除了之前新添加文件的記錄绒怨,又多了一條記錄:Changes not staged for commit
纯赎,表明已標(biāo)記對象發(fā)生變更但是未被暫存,其下面第一第二行是輔助信息南蹂,第三行告訴我們犬金,README.txt已經(jīng)修改(modified)
;
隨后我們可以使用git add指令暫存此次變更,此時晚顷,再執(zhí)行g(shù)it status指令峰伙,可以看到:
所有變更都已暫存,等待下一次提交该默。
查看簡短狀態(tài)信息(git status -s)
上文已經(jīng)指出瞳氓,使用git status可以查看當(dāng)前工作目錄完整的狀態(tài),同時栓袖,git還支持使用參數(shù)指明查看簡短狀態(tài)信息:
git status -s
or
git status --short
如下匣摘,其信息比git status簡潔明了:
查看變更信息(git diff)
前文的git status可以查看當(dāng)前工作目錄的狀態(tài)信息,包括當(dāng)前分支裹刮,變更文件等音榜,但都屬于文件層次的信息;
有時我們希望知道:
- 哪些變更未被暫存捧弃;
- 哪些變更已暫存赠叼,等待提交
git status顯然是不能告訴我們,因為這是屬于git diff的使命违霞,如嘴办,在README.txt文件中內(nèi)容添加‘/’
:
如上圖,git diff
以行為單位买鸽,告訴我們所有變更文件哪些行發(fā)生變更(增加或刪除)涧郊。
git diff
比較當(dāng)前工作目錄和暫存區(qū)的內(nèi)容,然后展示哪些文件內(nèi)容發(fā)生變更并且尚未暫存眼五;同時底燎,其支持額外參數(shù)--staged(或–cached),該參數(shù)指定時弹砚,將輸出上次提交內(nèi)容與暫存區(qū)內(nèi)容比較后的的變更。簡言之枢希,git diff輸出未暫存的變更桌吃,git diff --staged
輸出已暫存待提交的變更。
在使用git add .
暫存變更后苞轿,使用git diff指令是沒用的茅诱,而使用git diff --staged
指令,輸出如下:
提交變更(git commit)
所有的變更搬卒,最終都需要提交瑟俭,才能在本地持久化報存,在將所有變更暫存(git add)后契邀,我們就可以進行提交了摆寄,相關(guān)指令就是:
git commit
在輸入如上指令后,將進入Git commit信息編輯狀態(tài):
我們可以編輯本次提交的備注信息,其中的默認備注信息都以#開頭,表明提交時會被忽略微饥。
git commit指令告訴Git持久化記錄(提交)我們暫存區(qū)(staging area)中的快照逗扒,任何未被暫存的變更,不會被添加進暫存區(qū)的快照欠橘,仍然保留在當(dāng)前工作目錄矩肩,我們可以隨后提交。
更詳細的提交信息(git commit -v)
除了使用默認的git commit指令肃续,我們還可以添加-v參數(shù)黍檩,在提交信息中顯示變更內(nèi)容,如下:
如上圖始锚,和之前的比較刽酱,除了基本的提示,還有文件變更內(nèi)容提示疼蛾,可以避免某些誤提交肛跌。
行內(nèi)輸入提交信息(git commit -m)
當(dāng)然症概,Git還支持我們使用-m
參數(shù)憔足,指明我們在使用git commit
指令時直接填寫提交備注信息:
跳過暫存區(qū)(git commit -a)
我們知道對于發(fā)生變更的對象,我們需要先使用git add
命迈,暫存變更皮钠,再使用git commit
提交變更稳捆;
但是還有一種可以不使用git add
指令的方式,可以提交變更麦轰,就是給git commit
指令添加-a
參數(shù):
git commit -a
但是需要注意的是乔夯,該參數(shù),只能直接提交工作目錄中已標(biāo)記的對象(文件或目錄)的變更款侵,對于未標(biāo)記末荐,如新添加的對象,是無效的新锈。
查看提交歷史(Git log)
本節(jié)要介紹的是如何查看之前的提交歷史及信息甲脏,你應(yīng)該知道的git log指令,默認地妹笆,不帶參數(shù)時块请,執(zhí)行g(shù)it log指令,輸出的是當(dāng)前倉庫按逆序排序(最近提交在最前)的提交記錄:
如上圖拳缠,每個提交記錄包含其SHA-1校驗和墩新,提交者用戶名,提交日期窟坐,提交備注信息海渊。
git log
指令支持指定許多參數(shù)绵疲,以過濾輸出不同提交記錄,下文展開介紹切省。
指定查看提交記錄數(shù)(git log -2)
Git支持我們指定數(shù)量參數(shù)最岗,限定該次查看提交記錄數(shù)量,如git log -2朝捆,之后輸出最近的兩條提交記錄般渡。
格式化輸出提交記錄(git log –pretty)
Git支持我們格式化輸出的提交記錄信息,使用–pretty參數(shù)芙盘,其值主要有以下幾個:
- oneline: 指定一行輸出一條提交記錄驯用;
- short: 指定按原格式輸出簡要信息;
- full: 指定按原格式輸出信息儒老;
- fuller: 指定按原格式輸出更多信息蝴乔;
- format:””: 允許指定自定義輸出格式,如:
git log --pretty=format:"%h - %an, %ar : %s"
查看簡要提交變更(git log –stat)
git log --stat
輸出如下:
除了輸出基礎(chǔ)提交信息驮樊,后面還輸出了本次提交的簡要變更信息:變更了多少文件薇正,及每個文件變更的行數(shù),并在最后輸出總結(jié)數(shù)據(jù)囚衔。
查看詳細提交變更(git log -p)
相對于git log --stat
輸出簡要提交變更信息挖腰,我們可以指定-p
參數(shù):git log -p
,輸出提交變更的詳細內(nèi)容练湿,如:
更多參數(shù)說明
| 參數(shù) | 說明 |
來源:Git由淺入深之操作與指令
作者:驚鴻三世(轉(zhuǎn)載已獲得原作者許可猴仑,如需轉(zhuǎn)載請與原作者聯(lián)系)
本篇正式開始介紹Git的基礎(chǔ)操作與原理,看完本篇肥哎,你應(yīng)該知道如何使用Git進行一次基礎(chǔ)的版本控制辽俗,包括:Git倉庫的生成和獲取,添加和忽略版本控制對象篡诽;暫存崖飘,查看,緩存杈女,變更坐漏;查看和查找提交歷史;格式化歷史記錄輸出碧信;刪除和移動Git倉庫內(nèi)對象。
獲取Git倉庫(Git repository)
使用Git的第一步是要獲取一個Git倉庫街夭,我們使用Git的操作對象都是存放在Git倉庫里砰碴,獲取Git倉庫的方式有兩種:
- 導(dǎo)入一個項目或目錄到Git,初始化(init)生成Git倉庫板丽;
- 從遠程服務(wù)器克鲁释鳌(clone)一個Git倉庫趁尼。
初始化倉庫(init)
若我們需要使用一個項目或目錄生成一個Git倉庫,只需要通過命令行進入該目錄猖辫,執(zhí)行如下Git指令:
git init
此操作將在此目錄生成一個.git子目錄酥泞,該目錄包含整個倉庫結(jié)構(gòu),即倉庫的所有文件啃憎;同時會檢出(checkout)一個默認工作分支芝囤,通常名為master。
此時辛萍,我們只是初始化生成了一個Git倉庫悯姊,還未添加需要進行版本控制的對象–文件或目錄。
克隆倉庫(clone)
很多時候贩毕,我們需要從遠程服務(wù)器獲取一個已存在的Git倉庫悯许,我們只需要使用如下指令:
git clone https://github.com/codingplayboy/javascript_notes
git clone后面跟著的url就是已存在的Git倉庫地址,我們需要知道的是Git克隆是對服務(wù)器上倉庫的一次近乎完整的數(shù)據(jù)拷貝辉阶,當(dāng)前倉庫項目的所有文件及其各版本歷史都會被獲取先壕。
執(zhí)行如上指令后,會在當(dāng)前目錄創(chuàng)建一個javascript_notes目錄并在javascript_notes中初始化一個.git子目錄谆甜,拉取倉庫的所有數(shù)據(jù)垃僚,然后根據(jù)倉庫(或項目)的最新版本檢出(check out)一個工作分支,通常該分支默認名稱為master店印。
倉庫別名
我們克隆一個Git倉庫時冈在,其默認名還是倉庫名,但是也支持我們自定義本地別名:
git clone https://github.com/codingplayboy/javascript_notes js_notes
執(zhí)行如上指令按摘,會克隆一個倉庫包券,并導(dǎo)入到當(dāng)前目錄下的js_notes目錄。
倉庫Url
Git倉庫Url支持的協(xié)議有很多炫贤,最常見的是https://
和git@
溅固;還有使用SSH傳輸協(xié)議的,形如git://
或者user@server:path/xxx/repository.git
兰珍。
版本控制對象
在上節(jié)侍郭,我們已經(jīng)知道如何獲取一個Git倉庫,但是到目前為止也僅僅是存在一個倉庫掠河,我們進行版本控制的對象(文件或目錄)并沒有添加進倉庫亮元。
工作目錄及其內(nèi)對象的狀態(tài)
相關(guān)指令:git status
當(dāng)我們獲取一個倉庫,如克隆一個遠端倉庫后唠摹,在倉庫目錄執(zhí)行上面指令爆捞,如圖所示:
- 圖中第一行
on branch master
告訴我們當(dāng)前我們處在名為master的分支; - 第二行
up-to-date with 'origin/master'
說明目前分支與遠程倉庫的master分支保持同步最新版本勾拉; - 第三行
working directory clean
說明目前倉庫中沒有新加或修改過的對象(文件或目錄)煮甥。
關(guān)于控制對象的狀態(tài)(git status)
在當(dāng)前工作目錄的文件或目錄盗温,可能出于兩種狀態(tài):
- 已標(biāo)記(tracked)
所謂已標(biāo)記文件或目錄,即那些在Git最新快照里存在的對象成肘,可能是未修改(unmodified)卖局,已修改(modified)或暫存(staged)的文件或目錄。
- 未標(biāo)記(untracked)
未標(biāo)記對象双霍,即除去已標(biāo)記對象外砚偶,所有對象,比如在工作目錄下但是未包含在最新快照里并且不在暫存區(qū)(staging area)店煞。
可以想象一下蟹演,當(dāng)?shù)谝淮慰寺∫粋€遠程倉庫后,倉庫下的所有文件都應(yīng)該是處于已標(biāo)記(tracked)但是未修改的狀態(tài)顷蟀。
添加對象(git add)
添加版本控制對象的指令是git add
酒请,比如,我們可以使用如下指令添加一個README.txt文件鸣个,當(dāng)然我們首先需要在倉庫目錄下羞反,創(chuàng)建該文件(任意方式創(chuàng)建),查看狀態(tài):
如上圖囤萤,顯示README.txt文件為Untracked file昼窗,并且提示:use git add to track;
然后使用git add指令后:
git add README.txt
再次執(zhí)行g(shù)it status指令:
如上,出現(xiàn):Changes to be committed,說明該文件已被標(biāo)記(tracked)且被暫存,我們可以進行提交了涛舍。
當(dāng)然該指令還可以對目錄使用:
git add test/
如上指令澄惊,將添加該test目錄及其內(nèi)所有文件或子目錄。
最后富雅,也許我們希望一次添加所有變更掸驱,而不是一個一個添加,如下指令没佑,可以實現(xiàn):
git add .
我們還需要關(guān)注git add指令毕贼,不只是能添加版本控制對象,還有以下功能:
- 暫存變更(staged)
- 標(biāo)記沖突已解決(resolved)
git add指令蛤奢,更貼切的作用應(yīng)該是添加新內(nèi)容(文件/目錄/變更)到下一次提交鬼癣,即將新內(nèi)容加入最新快照,等待提交啤贩;
關(guān)于后兩點功能待秃,后文有詳細介紹。
忽略對象(.gitignore)
有時候痹屹,我們并不希望對倉庫內(nèi)所有對象(文件或目錄)進行管理章郁,某些開發(fā)依賴或本地調(diào)試使用文件和目錄,我們不需要在團隊間共享痢掠,這些文件應(yīng)該被Git忽略驱犹,我們只需要創(chuàng)建一個.gitignore文件,在此文件中列出希望被忽略的文件或目錄足画,如:
.gitignore
文件語法主要如下:
- 以行為單位雄驹,一行匹配一個條件
- 空行或以#開頭的行會被忽略
- 表達式支持glob格式
- 排除某表達式匹配項在該表達式前加!;
暫存變更(git add)
在添加README.txt
文件后,我們可以對其進行修改淹辞,如在該文件加入一行文字http://blog.codingplayboy.com
医舆,然后執(zhí)行git status
指令,結(jié)果如下:
發(fā)現(xiàn)象缀,除了之前新添加文件的記錄蔬将,又多了一條記錄:Changes not staged for commit
,表明已標(biāo)記對象發(fā)生變更但是未被暫存央星,其下面第一第二行是輔助信息霞怀,第三行告訴我們,README.txt已經(jīng)修改(modified)
莉给;
隨后我們可以使用git add指令暫存此次變更毙石,此時,再執(zhí)行g(shù)it status指令颓遏,可以看到:
所有變更都已暫存徐矩,等待下一次提交。
查看簡短狀態(tài)信息(git status -s)
上文已經(jīng)指出叁幢,使用git status可以查看當(dāng)前工作目錄完整的狀態(tài)滤灯,同時,git還支持使用參數(shù)指明查看簡短狀態(tài)信息:
git status -s
or
git status --short
如下曼玩,其信息比git status簡潔明了:
查看變更信息(git diff)
前文的git status可以查看當(dāng)前工作目錄的狀態(tài)信息鳞骤,包括當(dāng)前分支,變更文件等演训,但都屬于文件層次的信息弟孟;
有時我們希望知道:
- 哪些變更未被暫存;
- 哪些變更已暫存样悟,等待提交
git status顯然是不能告訴我們拂募,因為這是屬于git diff的使命,如窟她,在README.txt文件中內(nèi)容添加‘/’
:
如上圖陈症,git diff
以行為單位,告訴我們所有變更文件哪些行發(fā)生變更(增加或刪除)震糖。
git diff
比較當(dāng)前工作目錄和暫存區(qū)的內(nèi)容录肯,然后展示哪些文件內(nèi)容發(fā)生變更并且尚未暫存;同時吊说,其支持額外參數(shù)--staged(或–cached)论咏,該參數(shù)指定時优炬,將輸出上次提交內(nèi)容與暫存區(qū)內(nèi)容比較后的的變更。簡言之厅贪,git diff輸出未暫存的變更蠢护,git diff --staged
輸出已暫存待提交的變更。
在使用git add .
暫存變更后养涮,使用git diff指令是沒用的葵硕,而使用git diff --staged
指令,輸出如下:
提交變更(git commit)
所有的變更贯吓,最終都需要提交懈凹,才能在本地持久化報存,在將所有變更暫存(git add)后悄谐,我們就可以進行提交了介评,相關(guān)指令就是:
git commit
在輸入如上指令后,將進入Git commit信息編輯狀態(tài):
我們可以編輯本次提交的備注信息,其中的默認備注信息都以#開頭尊沸,表明提交時會被忽略威沫。
git commit指令告訴Git持久化記錄(提交)我們暫存區(qū)(staging area)中的快照,任何未被暫存的變更洼专,不會被添加進暫存區(qū)的快照棒掠,仍然保留在當(dāng)前工作目錄,我們可以隨后提交屁商。
更詳細的提交信息(git commit -v)
除了使用默認的git commit指令烟很,我們還可以添加-v參數(shù),在提交信息中顯示變更內(nèi)容蜡镶,如下:
如上圖雾袱,和之前的比較,除了基本的提示官还,還有文件變更內(nèi)容提示芹橡,可以避免某些誤提交。
行內(nèi)輸入提交信息(git commit -m)
當(dāng)然望伦,Git還支持我們使用-m
參數(shù)林说,指明我們在使用git commit
指令時直接填寫提交備注信息:
跳過暫存區(qū)(git commit -a)
我們知道對于發(fā)生變更的對象,我們需要先使用git add
屯伞,暫存變更腿箩,再使用git commit
提交變更;
但是還有一種可以不使用git add
指令的方式劣摇,可以提交變更珠移,就是給git commit
指令添加-a
參數(shù):
git commit -a
但是需要注意的是,該參數(shù),只能直接提交工作目錄中已標(biāo)記的對象(文件或目錄)的變更钧惧,對于未標(biāo)記暇韧,如新添加的對象,是無效的浓瞪。
查看提交歷史(Git log)
本節(jié)要介紹的是如何查看之前的提交歷史及信息锨咙,你應(yīng)該知道的git log指令,默認地追逮,不帶參數(shù)時,執(zhí)行g(shù)it log指令粹舵,輸出的是當(dāng)前倉庫按逆序排序(最近提交在最前)的提交記錄:
如上圖钮孵,每個提交記錄包含其SHA-1校驗和,提交者用戶名眼滤,提交日期巴席,提交備注信息。
git log
指令支持指定許多參數(shù)诅需,以過濾輸出不同提交記錄漾唉,下文展開介紹。
指定查看提交記錄數(shù)(git log -2)
Git支持我們指定數(shù)量參數(shù)堰塌,限定該次查看提交記錄數(shù)量赵刑,如git log -2,之后輸出最近的兩條提交記錄场刑。
格式化輸出提交記錄(git log –pretty)
Git支持我們格式化輸出的提交記錄信息般此,使用–pretty參數(shù),其值主要有以下幾個:
- oneline: 指定一行輸出一條提交記錄牵现;
- short: 指定按原格式輸出簡要信息铐懊;
- full: 指定按原格式輸出信息;
- fuller: 指定按原格式輸出更多信息瞎疼;
- format:””: 允許指定自定義輸出格式科乎,如:
git log --pretty=format:"%h - %an, %ar : %s"
查看簡要提交變更(git log –stat)
git log --stat
輸出如下:
除了輸出基礎(chǔ)提交信息,后面還輸出了本次提交的簡要變更信息:變更了多少文件贼急,及每個文件變更的行數(shù)茅茂,并在最后輸出總結(jié)數(shù)據(jù)。
查看詳細提交變更(git log -p)
相對于git log --stat
輸出簡要提交變更信息竿裂,我們可以指定-p
參數(shù):git log -p
玉吁,輸出提交變更的詳細內(nèi)容,如:
更多參數(shù)說明
參數(shù) | 說明 |
---|---|
-p | 顯示詳細提交變更 |
–stat | 顯示簡要提交變更 |
–shortstat | 在–stat參數(shù)輸出基礎(chǔ)上只輸出修改腻异,新增或刪除的行 |
–name-only | 顯示提交時發(fā)生變更的文件名 |
–name-status | 顯示提交時發(fā)生變更的文件名进副,并顯示變更類型(刪除,新增,或修改) |
–abbrev-commit | 只顯示提交記錄SHA-1校驗和的前幾個字符 |
–relative-date | 顯示簡要提交日期(如, “2 weeks ago”) |
–graph | 顯示分支提交歷史的ASCII圖 |
–pretty | 支持預(yù)定義輸出格式影斑,詳細說明見上文 |
過濾提交歷史輸出
Git支持我們在輸出歷史記錄時给赞,添加多種過濾條件,最簡單的比如-<num>參數(shù)條件矫户,指定輸出最近的若干條提交記錄片迅,還有諸如提交時間,提交作者等條件皆辽。
–since/–after:git log --since=2.weeks
輸出兩周內(nèi)的提交記錄柑蛇,參數(shù)值還可以形如”2016-01-15″,”2 years 1 day 10 minutes ago”–until/–before: git log --until=2016-01-15
–grep: git log --grep=README
可以指定關(guān)鍵字驱闷,只有提交信息中存在關(guān)鍵字才會輸出–author: 過濾輸出指定提交作者的記錄
–commiter: 輸出滿足指定commiter的提交記錄
-S: git -log -Swebpack
輸出提交內(nèi)容(代碼或文件或目錄)包含指定字符串的記錄
刪除對象(git rm)
很多時候耻台,我們也會需要從Git倉庫中刪除某些對象,rm就是刪除文件或目錄的指令空另,但是需要特別強調(diào)的是盆耽,該指令只是將某對象從當(dāng)前工作目錄刪除,如:
使用rm后,當(dāng)前狀態(tài)是”Changes not staged for commit:”此次變更未被暫存和提交扼菠。
若你需要將某對象從已標(biāo)記文件或暫存區(qū)刪除摄杂,則需要使用git rm指令,如下:
使用git rm后循榆,變更會被暫存析恢。
強制刪除(git rm -f)
當(dāng)我們發(fā)生某次變更,且將其添加到暫存區(qū)(index索引)秧饮,我們只使用git rm指令是不行的:
我們必須加上-f參數(shù)氮昧,指明強制刪除。
緩存變更(git rm –cached)
有時候浦楣,我們在某次變更添加了某文件(甚至可能已經(jīng)添加到暫存區(qū))袖肥,但是暫時不需要提交,又不想直接刪除它振劳,即只在工作目錄存在椎组,而不將其放入暫存區(qū),只需要添加--cached參數(shù)历恐,如修改README.txt同時寸癌,新增了test.txt文件,并且暫存了變更弱贼,之后提交時我們不希望此次提交test.txt蒸苇,但又不希望刪除它,則在提交前使用git rm --cached test.txt
:
移動對象(git mv)
通常吮旅,我們也許需要移動或重命名某文件或目錄溪烤,Git有mv指令,還要一個更方便的指令git mv,如:
git mv a.txt b.txt
另一方面檬嘀,重命名或移動某文件或目錄槽驶,這兩個操作對于Git來說是沒有太大區(qū)別的,比如上面的重命名文件操作等效于:
mv a.txt b.txt
git rm a.txt
git add b.txt
我們可以看到git mv指令是在mv指令操作的基礎(chǔ)上暫存此次操作的變更鸳兽,而mv只是一個重命名或移動指令掂铐,不涉及版本控制流程。
到此揍异,Git的基本使用全陨,已經(jīng)介紹完成,不過衷掷,本篇講解的基礎(chǔ)操作烤镐,都是在計算機本地進行的版本控制,并沒有同步到服務(wù)器棍鳖,那么下一篇的主題就出來了:Git如何與遠程服務(wù)器進行協(xié)同工作。
往期文章
更多干貨內(nèi)容請關(guān)注:極樂科技