Git大法好——2.Git本地操作指令詳解
標(biāo)簽: Git
引言
上節(jié)給大家講解了有關(guān)于Git的一些概念榨咐,Git的引入介却,Git的四個(gè)組成部分,Git文件的狀態(tài)块茁,以及
Git的下載安裝齿坷;前面也講過(guò)Git和SVN有個(gè)明顯的差別就是,Git可以不需要網(wǎng)絡(luò)就可以進(jìn)行版本
控制数焊,這是因?yàn)镚it中每個(gè)電腦都擁有一個(gè)本地的版本庫(kù)永淌,而遠(yuǎn)程的倉(cāng)庫(kù)僅僅是作為我們交換修改
的一個(gè)工具!即使失去這個(gè)工具佩耳,我們也可以干活遂蛀,只是交換修改不方便罷了,假如是SVN干厚,遠(yuǎn)程
服務(wù)器掛了...所以李滴,我們使用Git的時(shí)候大部分時(shí)間都是在進(jìn)行Git的一些本地操作,當(dāng)然還有
遠(yuǎn)程服務(wù)器分支合并的一些問(wèn)題等蛮瞄,本節(jié)我們就先來(lái)熟悉一波本地操作的一些常用指令所坯!本節(jié)
講解的內(nèi)容概要如下:
- 1.設(shè)置您的身份信息(git config)
- 2.獲取幫助(git help)
- 3.創(chuàng)建本地的代碼倉(cāng)庫(kù)(git init)
- 4.將文件放入暫存區(qū)(git add)
- 5.將暫存區(qū)的內(nèi)容提交到本地倉(cāng)庫(kù)(git commit)
- 6.查看當(dāng)前工作區(qū)與暫存區(qū)的狀態(tài)(git status)
- 7.查看工作區(qū)與暫存區(qū)的差異(git diff)
- 8.查看提交更改的記錄(git log)
- 9.文件恢復(fù)——未add(git checkout)
- 10.文件恢復(fù)——已a(bǔ)dd未commit(git reset)
- 11.文件恢復(fù)(已commit)——版本回退(git reset HEAD^)
- 12.查看輸入的每一條指令(git reflog)
- 13.Git命令別名(git config --xxx alias.xxx xxx)
- 14.Git命令的自動(dòng)補(bǔ)全(按兩次Tab鍵)
好的,開始本節(jié)內(nèi)容(要先安裝好Git哦挂捅!)~
1.設(shè)置您的身份信息
安裝完Git芹助,我們第一件要做的事情是先配置我們的身份信息,作為自己參與團(tuán)隊(duì)協(xié)作的
一個(gè)身份標(biāo)記闲先,比如誰(shuí)對(duì)某個(gè)文件進(jìn)行了修改状土,鍵入下述命令:
git config --global user.name "coder-pig"
git config --global user.email "779878443@qq.com"
配置完后,把""部分信息去掉伺糠,輸多一次上面的指令蒙谓,可以看到是否配置成功
也可以鍵入下述指令來(lái)查看所有的Git設(shè)置:
git config --list
另外,上面設(shè)置的配置信息是全局的退盯,一般我們?cè)诠旧习啾宋冢緟f(xié)作的都是公司
的項(xiàng)目泻肯,這里可以設(shè)置全局的配置渊迁,用global慰照,可能你有自己私人的項(xiàng)目,那么
你可以單獨(dú)的為這個(gè)項(xiàng)目設(shè)置一個(gè)局部的配置琉朽,鍵入下述命令:
git config --local user.name "coder-pig"
git config --local user.email "779878443@qq.com"
僅僅只需要把global改成local即可~此時(shí)這個(gè)倉(cāng)庫(kù)的git配置就不會(huì)和全局的相同毒租,
從而可以避免一些不必要的麻煩!
2.獲取幫助
和其他的命令行一樣箱叁,Git同樣是帶有help指令的墅垮,當(dāng)我們遇到?jīng)]見過(guò),又或者忘記用法的
指令耕漱,我們可以鍵入:
git help init
把init改成你要查詢的那個(gè)指令即可算色!比如git help add!
win下會(huì)打開一個(gè)Git的Manual(手冊(cè))的頁(yè)面螟够,可以在之類查看指令的一些用法
而Ubuntu下則會(huì)直接在命令行輸出:
當(dāng)然你也可以到Git官方手冊(cè)中查找對(duì)應(yīng)的指令灾梦!
3.創(chuàng)建本地的代碼倉(cāng)庫(kù)
你可以直接鍵入下述指令創(chuàng)建一個(gè)新的帶Git倉(cāng)庫(kù)的項(xiàng)目:
git init GitForTest
把GitForTest改成你想創(chuàng)建的工程名即可!接著我們可以來(lái)到新創(chuàng)建的工程的
目錄下妓笙,這里需要 修改下讓隱藏文件可見若河,就可以看到.git的文件夾里,里面
東東就是我們git倉(cāng)庫(kù)的東東了寞宫,切記 別隨意去改或者刪除里面的東西萧福!(你也
可以鍵入:ls -ah來(lái)查看隱藏文件)
當(dāng)然假如你已經(jīng)有項(xiàng)目了,想在之前項(xiàng)目的基礎(chǔ)上添加Git倉(cāng)庫(kù)辈赋,那么通
過(guò)命令行或者git bash來(lái)到當(dāng)前工程的文件夾目錄下鲫忍,鍵入下述指令即可
為你的項(xiàng)目添加本地Git倉(cāng)庫(kù):
git init
4.將文件放入暫存區(qū)
前面Git文件狀態(tài)我們講過(guò)假如文件未加入版本控制,那么該文件處于Untracked
(未跟蹤)的狀態(tài)钥屈,我們可以通過(guò)git add指令將文件添加到暫存區(qū)中此時(shí)文件會(huì)變
成Tracked(已跟蹤)狀態(tài)饲窿!我們可以使用下面的指令,將文件一個(gè)個(gè)添加到暫存區(qū)中:
git add README.md
假如要添加的文件很多的話焕蹄,這樣一個(gè)個(gè)添加顯得有些麻煩逾雄,我們可以一次性的添加多個(gè):
1)將所有tracked文件中被修改或已刪除的文件信息添加到Git暫存區(qū),不會(huì)處理untracked的文件腻脏!
git add -u
2)將所有tracked文件中被修改或已刪除的文件信息添加到Git倉(cāng)庫(kù)鸦泳,會(huì)把理untracked的文件信息
也加入Git暫存區(qū)
git add -A
3)把當(dāng)前工作區(qū)的所有文件全加入到Git暫存區(qū)
git add .
除了上面三種外,git其實(shí)還為我們提供了交互界面模式永品,我們可以鍵入:
git add -i
上圖的流程是這樣的:
1.我先在GitForTest的文件夾里創(chuàng)建了兩個(gè)文件
2.鍵入git add -i做鹰,進(jìn)入后,鍵入4鼎姐,選擇添加untracked的文件
3.他給我們列出了untracked的文件钾麸,然后我們根據(jù)序號(hào)來(lái)添加文件
4.輸入?會(huì)彈出相關(guān)提示更振,然后直接回車,結(jié)束選擇饭尝!
5.然后再次輸入git add -i肯腕,輸入4,可以看到已不存在untacked的文件了钥平!
當(dāng)然還有其他幾個(gè)指令实撒,限于篇幅,有興趣的可以自己研究研究涉瘾!
5.將暫存區(qū)的內(nèi)容提交到本地倉(cāng)庫(kù)
我們可以通過(guò)git commit -m “xxx”指令將暫存區(qū)的內(nèi)容提交到倉(cāng)庫(kù)中
git commit -m "修改了xxx"
后面的-m是對(duì)本次提交的說(shuō)明知态,"xxx"是說(shuō)明內(nèi)容,不該偷懶省去立叛,假如你這里不
輸入负敏,-m "xxx" 的話,也會(huì)讓你進(jìn)入Vi/Vim來(lái)編寫聲明信息的~所以建議還是在這
里進(jìn)行提交內(nèi)容的說(shuō)明吧秘蛇!
另外其做,我們的項(xiàng)目可能存在一些幾百年不變的或者自動(dòng)生成的文件,比如lib彤叉,
gen庶柿,bin文件夾等,我們沒必要每次都把這些都commit秽浇,我們可以在.git同級(jí)
的目錄下創(chuàng)建一個(gè)名為.gitignore的文件浮庐,然后編輯內(nèi)容,把不需要提交的文
件寫上柬焕,那么commit的時(shí)候就會(huì)自動(dòng)忽略這些文件的了~:
6.查看當(dāng)前工作區(qū)與暫存區(qū)的狀態(tài)
我們可以用git status指令來(lái)查看工作區(qū)與暫存區(qū)的當(dāng)前情況审残,比如工作區(qū)有什么
文件和暫存區(qū)的文件 對(duì)比,發(fā)生了改變斑举,要不要add下搅轿?又比如暫存區(qū)里有東西add
了,但是還沒提交等等富玷,直接鍵入下述指令:
git status
比如我這里修改了下README.md文件璧坟,只是改了還沒add:
add文件后:
commit提交暫存區(qū)內(nèi)容
恩,很簡(jiǎn)單赎懦,另外雀鹃,你還可以用下述指令,讓結(jié)果以簡(jiǎn)短的形式輸出~
git status -s
7.查看工作區(qū)與暫存區(qū)的差異
上面我們可以通過(guò)git status獲取當(dāng)前工作區(qū)與緩存區(qū)的狀態(tài)励两,僅僅是狀態(tài)黎茎,
假如我們需要查看發(fā)生改變的內(nèi)容,那么你需要鍵入下述指令:
git diff
這樣就可以看到當(dāng)前的工作區(qū)與暫存區(qū)中對(duì)比当悔,做了哪些修改傅瞻!
PS:上面是我們?cè)赗EADME.md文件里添加了一條語(yǔ)句踢代,然后再鍵入git diff!
8.查看提交更改的記錄
還記得之前的網(wǎng)購(gòu)的例子嗎嗅骄,我們可以在我的訂單中找到自己的訂單記錄胳挎,
同樣,在Git中掸读,我們也可以查看所有commit的記錄串远!可以鍵入下述指令:
git log
當(dāng)然宏多,你也可以調(diào)用下述指令獲得更精簡(jiǎn)的結(jié)果
git log --oneline
如果上面還滿足不了你的話儿惫,可以參考:Viewing the Commit History
對(duì)log進(jìn)行定制,比如:
9.文件恢復(fù)——未add
我們可以直接右鍵刪除一個(gè)文件伸但,又或者進(jìn)入命令行肾请,鍵入rm xxx.xxx將文件刪除,
但是刪除的僅僅是 當(dāng)前工作區(qū)里的文件更胖,暫存區(qū)里還是存在著該文件的铛铁,所以此時(shí)
你鍵入git status的話,你會(huì)看到這樣的結(jié)果:
Git告訴你工作區(qū)的文件被刪除了却妨,然后你有兩種選擇:
1)把暫存區(qū)里的文件也刪了饵逐,那么鍵入:
git rm "xxx.xxx"
git commit -m "xxx"
2)誤刪了,將暫存區(qū)的文件恢復(fù)到工作區(qū)彪标,那么可以鍵入:
git checkout -- xxx.xxx
duang倍权!被刪除的文件又回來(lái)了~
當(dāng)然,上面的checkout不止適用于誤刪文件捞烟,當(dāng)你把一個(gè)文件改得面目全非的時(shí)候薄声,
你突然后悔了,但是你已經(jīng)ctrl+s保存了很多次代碼了题画,你可以用用上述指令回到
這個(gè)文件的最初樣子默辨!(前提是你還沒add!)
10.文件恢復(fù)——已a(bǔ)dd未commit
假如你已經(jīng)把文件用git add到了暫存區(qū)苍息,那么此時(shí)你直接用checkout文件是沒有
作用的缩幸!我們需要通過(guò)git reset指令來(lái)廢除此次修改記錄(版本回退),讓當(dāng)前文件
回到上一次提交時(shí)的狀態(tài)竞思!鍵入:
git reset HEAD xxx.xxx
此時(shí)再調(diào)用:
git checkout -- xxx.xxx
文件即可恢復(fù)原樣表谊!
11.文件恢復(fù)(已commit)——版本回退
假如,我們的文件修改已經(jīng)commit了衙四,而你無(wú)端端的又后悔了铃肯,想恢復(fù)成上一次
commit時(shí)的文件,又或者上上次的传蹈,這時(shí)候你可能開始方了押逼,不過(guò)Git為我們提
供了時(shí)光機(jī)(版本回退)步藕,我們可以通過(guò)下述指令回退到上一個(gè)版本:
git reset HEAD^
恩,我們鍵入git log后可以看到版本已經(jīng)回退到上一個(gè)版本了挑格!
如果是上上個(gè)版本咙冗,你只需加多,再上一個(gè)版本繼續(xù)加漂彤,如此類推雾消!
當(dāng)然家浇,除了上面的形式套媚,你還可以根據(jù)版本號(hào)來(lái)回退,比如這里我退到第一個(gè)版本
git reset --hard 8c3f91f
嘿嘿蟋滴,無(wú)壓力媳板,你突然又后悔了桑腮,想回到新的那個(gè)版本,嗯...好吧蛉幸,同樣是上面
的指令:不過(guò)版本號(hào)改成最新那次commit的版本號(hào)就可以了破讨!
git reset --hard cf2d155
12.查看輸入的每一條指令
你可能會(huì)支支吾吾的過(guò)來(lái)對(duì)我說(shuō):"恩,那個(gè)我剛剛把命令行關(guān)了奕纫,那個(gè)最新的版
本號(hào)找不著了提陶,git log也找不到那個(gè)最新的版本號(hào),那我是不是不能回未來(lái)了匹层?
"幸運(yùn)的是隙笆,Git時(shí)光機(jī)會(huì)記錄你輸入的每一條指令,你只需鍵入下述指令:
git reflog
拿到版本號(hào)又固,git reset即可~
另外有一點(diǎn)要注意的是:git reflog并不會(huì)永遠(yuǎn)保存仲器,
Git會(huì)定期清理“用不到的對(duì)象”,所以別指望還能找到幾個(gè)月前的提交仰冠!
13.Git命令別名
如果想偷懶乏冀,想少敲幾個(gè)字母,可以為命令設(shè)置別名洋只,然后鍵入別名就調(diào)用對(duì)應(yīng)指令辆沦,
比如將status設(shè)置成st:
14.Git命令的自動(dòng)補(bǔ)全
輸入Git命令的時(shí)候按兩次Tab就可以了!
小結(jié):
本節(jié)給大家詳細(xì)地講解了一波Git的本地命令识虚,應(yīng)該可以滿足日常的需要了肢扯,學(xué)習(xí)這一節(jié),建議
自己建一個(gè)倉(cāng)庫(kù)担锤,按著一步步走一遍指令蔚晨,相信你會(huì)獲益匪淺,敲得多就熟悉了!下節(jié)我們來(lái)
講解分支相關(guān)的概念以及指令铭腕!謝謝~
參考文獻(xiàn):
——作者:coder-pig银择,本教程不收取任何費(fèi)用,歡迎轉(zhuǎn)載累舷,轉(zhuǎn)載請(qǐng)注明出處浩考,尊重作者
勞動(dòng)成果,請(qǐng)勿用于商業(yè)用途被盈,侵權(quán)必究析孽!