大綱:
一、前言
二、概述
三、在Windows上安裝Git
四、創(chuàng)建本地倉(cāng)庫(kù)
五、本地倉(cāng)庫(kù)管理詳解
六、總結(jié)
注釋:測(cè)試機(jī) CentOS 5.5 x86_64,Git 服務(wù)器版本:git version 1.8.2.1,客戶端版本:git version 1.9.2.msysgit.0。所有軟件請(qǐng)到這里下載:http://msysgit.github.io/。
一、前言
本來(lái)呢,其實(shí)呢。我以為Git也就幾個(gè)命令,沒(méi)什么難的。于是就到網(wǎng)上找了些文章看看,發(fā)現(xiàn)這些文章難得不知道該說(shuō)什么好。不是簡(jiǎn)單的寫幾個(gè)命令,就是直接復(fù)制粘貼手冊(cè)中的內(nèi)容,沒(méi)有一點(diǎn)連續(xù)感,不知道從何學(xué)起。總之呢,我想寫一個(gè)什么都不會(huì)的朋友能看懂的、初學(xué)朋友能看懂的、運(yùn)維能看懂的、開發(fā)也能看懂的,看完就能干活的教程。
二、概述
這個(gè)教程呢,有幾個(gè)部分先和大家說(shuō)一下:
Git 本地倉(cāng)庫(kù)詳解
Git 遠(yuǎn)程倉(cāng)庫(kù)詳解
Git 分支管理詳解
Git 標(biāo)簽管理詳解
GitHub 使用詳解
Git 全局配置詳解
Git與GitHub總結(jié)
注,本教程呢,只能讓你會(huì)使用Git干活,至于你呢想深入了解Git,或者想成為Git領(lǐng)域的專家喲,我想說(shuō)這只是個(gè)起步。還有我想說(shuō)Git只是個(gè)工具嘛,目的只是為了提高我們的工作效率,我們沒(méi)有必要去,也不需要學(xué)浪費(fèi)時(shí)間在研究工具上,只要我們會(huì)用就好,嘿嘿!也許有博友不同意啊,只是個(gè)人見解啊,勿噴啊!
三、在Windows上安裝Git
注,大家請(qǐng)到這里下載:http://msysgit.github.io/。具體的安裝過(guò)程我就不演示了,直接雙擊安裝即可。安裝完成后桌面上會(huì)生成一個(gè)Git bash圖標(biāo),雙擊打開會(huì)彈出一個(gè)類似命令行窗口的東西,大家請(qǐng)看下圖:
好了,到這里我們的Git就安裝完成了,嘿嘿!下面我們來(lái)進(jìn)行基本配置:
1.$ git config --global user.name"Your Name"
2.$ git config --global user.email “email@example.com”
注,我這里根據(jù)我的情況設(shè)置如下(如上圖):
1.$ git config --global user.name"chenmingqian"
2.$ git config --global user.email “mingqian_chen@163.com”
我們?cè)谏弦黄恼抡f(shuō)過(guò)Git是分布式控制系統(tǒng),所以,每個(gè)客戶端都必須設(shè)置:你的名字和郵箱。這樣才容易區(qū)分是哪個(gè)用戶提交的Git版本,嘿嘿!大家可以看到git config 后面接的是--global參數(shù),這表示你的機(jī)器上所有的Git倉(cāng)庫(kù)都會(huì)使用這個(gè)配置,但你也可以對(duì)不同的倉(cāng)庫(kù)指定不同的用戶名和郵箱。這個(gè)我們會(huì)在后面的文章中講解,這里不作說(shuō)明,嘿嘿!有興趣的博友可以先提前google一下。
四、創(chuàng)建本地倉(cāng)庫(kù)
1.版本庫(kù)又稱倉(cāng)庫(kù)
版本庫(kù)或者是倉(cāng)庫(kù),英文名Repository,其實(shí)啊說(shuō)白了就是一個(gè)目錄而且,這個(gè)目錄中的所以文件都被git管理而且,不管你做什么操作都會(huì)被記錄,包括:增加、刪除、修改文件等,都會(huì)被記錄下來(lái),以便后來(lái)跟蹤與修改相關(guān)記錄,甚至被還原。好了,下面我們就在我們客戶端(我這里演示的是Windows客戶端,其它客戶端操作一樣)中創(chuàng)建一個(gè)版本庫(kù):
大家可以看到我們?cè)?c/Users/root/下創(chuàng)建一個(gè)空目錄pro即可project簡(jiǎn)寫。還有一點(diǎn)需要說(shuō)明的在Windows系統(tǒng)中目錄名稱不要使用中文,不然會(huì)出現(xiàn)神馬問(wèn)題,我不負(fù)責(zé)。嘿嘿^_^……
2.目錄變成倉(cāng)庫(kù)
執(zhí)行g(shù)it init命令,即可Initialized empty Git repository in c:/Users/root/pro/.git/,初始化一個(gè)空目錄,路徑為c:/Users/root/pro/.git/。大家可以看到pro目錄中生成了一個(gè)隱藏目錄 .git目錄,進(jìn)入目錄中大家可以看到里面有很多文件,沒(méi)事不要修改或者改動(dòng)里機(jī)的文件,這里面的文件就是控制和管理版本庫(kù)的,嘿嘿。至于里文件的具體作用我們會(huì)在后面的文章中講解,想提前了解的朋友可以先google一下。
3.向本地倉(cāng)庫(kù)中增加文件
下面我們向版本庫(kù)中增加文件,需要注意的是,在版本庫(kù)中只能跟蹤和管理文本文件,比txt文件、js文件、php文件、java文件等,所有的程序代碼都可以的。但是像視頻、圖片等這些二進(jìn)制文件,雖然能由git管理,但是只能記錄大小,無(wú)法跟蹤具體修改了什么,嘿嘿。大家懂了吧。好了,下面我們來(lái)增加一個(gè)readme.txt文件,其內(nèi)容如下:
1.This is gittest.
2.Git is a version of the best controller.
3.……
注意,新建的readme.txt文件,一定要在pro目錄,不然git無(wú)法管理這里文件哦,嘿嘿!下面我們把個(gè)文件放到版本庫(kù)中。
1).git status 命令
我們先用git status命令查看一下,如上圖。大家可以看到git記錄我們新增加一個(gè)文件readme.txt,并且提示這個(gè)文件還沒(méi)有被提交。下面我們用git add命令提交一下。
2).git add 命令
git add 命令是告訴git,我們要把什么文件提交到倉(cāng)庫(kù)中去,大家可以看我們執(zhí)行g(shù)it add readme.txt命令后,沒(méi)有任何提示。那就說(shuō)明我們提交完成了。下面我們通過(guò)git commit命令,將readme.txt文件提交到版本庫(kù)中。
3).git commit 命令
1.$ git commit -m"add readme.txt"
2.[master (root-commit) e5d662b] add readme.
3.1filechanged, 3 insertions(+)
4.create mode 100644 readme.txt
大家可以看到我們用git commit命令提交readme.txt文件,給出的提示是 1 file changed, 3 insertions(+),一個(gè)文件改變,插入了三行內(nèi)容。與我們上面增加三行內(nèi)容一致。嘿嘿!下面我們簡(jiǎn)單的說(shuō)明一下git commit命令,其中的參數(shù)-m后面輸入的是本次提交的版本說(shuō)明,可以輸入任意內(nèi)容,但需要說(shuō)明的是,最好寫有意義的說(shuō)明,便于以后查看。
4).git status 命令
最后我們?cè)儆胓it status命令查看一下版本庫(kù)的狀態(tài),提示沒(méi)有任何內(nèi)容需要提交說(shuō)明我們向版本庫(kù)增加文件成功了,嘿嘿。
4.總結(jié)
1).初始化一個(gè)Git倉(cāng)庫(kù),使用git init命令
2).添加文件到本地Git倉(cāng)中,分為兩步:
使用git add命令,注意,可以多次使用,添加多個(gè)文件
使用git commit命令,完成添加。
為什么Git添加文件需要兩步呢?一步add,一步commit。嘿嘿,因?yàn)閏ommit命令可以一次提交多個(gè)文件,所以你可以多次使用add命令呢。下面是個(gè)案例:(我們也經(jīng)常這么用)
1.$ git add file1.php
2.$ git add file2.php
3.$ git add file3.php
4.$ git commit –m “add file1.php file2.php file3.php”
好了,到這里我們創(chuàng)建本地git倉(cāng)庫(kù)和向倉(cāng)庫(kù)中增加文件的內(nèi)容就講解完成了,下面我們來(lái)詳細(xì)講解一下Git本地倉(cāng)庫(kù)的管理,內(nèi)容有點(diǎn)多請(qǐng)大家慢慢看,嘿嘿!
五、本地倉(cāng)庫(kù)管理詳解
1.查看工作區(qū)的狀態(tài)(git status)
在上面的文章中我們成功的增加了一個(gè)readme.txt文件,并用git status命令查看了狀態(tài),在這節(jié)中我們就詳細(xì)的說(shuō)一下git status命令。我們修改一下readme.txt中的內(nèi)容如下:
1.This is gittest.
2.Git is a version of the best conntroller.
我們刪除了最后一行,現(xiàn)在我們?cè)儆胓it status命令查看一下狀態(tài):
從上圖中我們可以看到,我們用git status命令查看一下,我們得知readme.txt文件被修改過(guò)了,但是還沒(méi)有提交這個(gè)修改。但是有博友會(huì)問(wèn)了,git提示我們這個(gè)readme.txt這個(gè)文件被修改了,但我們想看看具體修改了什么內(nèi)容怎么辦呢?這個(gè)時(shí)候我們需要git diff命令出場(chǎng)了,如下圖:
大家可以從上面圖片中可以看到,我們刪除了最后一行的……省略號(hào)。嘿嘿,用紅顏色標(biāo)出來(lái)的。好了知道修改了什么,下面我們就提交修改吧,提交修改和提交新文件一致,也是兩步,先add,再commit。如下圖:
大家可以看到我們執(zhí)行g(shù)it add命令,同樣沒(méi)人輸出。但是,我們可以用git status命令查看一下。下面我們用git commit命令提交到本地版本庫(kù),如下圖:
同樣的我們使用git status命令查看一下狀得知我們修改的readme.txt文件已提交。好了,到這里我們的git status命令就講解完成了,同時(shí)我們也講解一個(gè)git diff命令,可以查看我們修改了哪些內(nèi)容。下面我們來(lái)講解一下版本回滾。
2.版本回滾
在上面一個(gè)章節(jié)中我們演示修改文件并提交文件,再用git status命令查看狀態(tài),下我們?cè)傩迬讉€(gè)版本并提交:
好了,就這樣我們不斷的修改并提交到本地的版本庫(kù)中。一會(huì)你測(cè)試的時(shí)候發(fā)現(xiàn)前修改的版本有問(wèn)題想回滾到前面的版本,或者你誤刪除了一些文件,想回到上一個(gè)commit中去,然后繼續(xù)工作。我們應(yīng)該怎么辦呢?在Git版本控制中,我們所有的操作都是有歷史記錄的,我們用git log命令查看一下(如下圖):
大家可以看到,用git log命令可以查看最近幾次提交的版本。如果你發(fā)現(xiàn)內(nèi)容太多,可以用這個(gè)命令查看(如下圖):
上面你看到的一大串?dāng)?shù)字,其實(shí)是commit id(即,版本號(hào)),和svn不一樣,Git的commit id不是1,2,3……這樣的遞數(shù)字,而是一相SHA1計(jì)算出來(lái)的哈希數(shù),用16進(jìn)制表示。有博友會(huì)問(wèn)了,為什么Git的commit id不是1,2,3……這樣的遞增數(shù)字,而是用SHA1算出來(lái)的哈希數(shù)來(lái)表示呢?大家應(yīng)該知道Git是分布式管理系統(tǒng),我們會(huì)有多個(gè)人同時(shí)開發(fā),如果大家都用1,2,3……這樣的遞增數(shù)字,作為版本號(hào),那不就沖突了嘛,嘿嘿。好了,下面我們來(lái)說(shuō)版本回滾,準(zhǔn)備把readme.txt回滾到“add readme.txt“的那個(gè)版本,我們應(yīng)該怎么做?
我們先來(lái)說(shuō)一下,Git的當(dāng)前是在哪個(gè)版本,在Git中我們用HEAD表示當(dāng)前版本,也就是我們最新提交的”749f84ccb87……ff2q6ad“,上一個(gè)版本就應(yīng)該這么表示”HEAD^“,再上一個(gè)版本就這樣表示”HEAD^^“,當(dāng)然如果有幾十個(gè)版本或者1000個(gè)版本,我們還要寫1000個(gè)^,這是不可能的,所以喲。我們寫成這樣HEAD~1000。好了,現(xiàn)在我們就用git reset命令,將我們的版本回退到”add readme.txt“中吧,如下圖:
大家可以看到,我們回到了”add readme.txt“版本中了,下面我們?cè)賮?lái)查看一下git log,如下圖:
有個(gè)問(wèn)題哦,有沒(méi)有發(fā)現(xiàn)我們最后提交的那個(gè)版本不見了,如上圖。現(xiàn)在只有三個(gè)版本了,這說(shuō)明什么問(wèn)題呢?舉個(gè)簡(jiǎn)單的例子說(shuō)明一下,就好比你從現(xiàn)在回到了18世界,想再回到21世界已經(jīng)回不去了,那應(yīng)該怎么辦呢?只要我們找到最新版本的commit id,我這里新版本的commit id是”749f84ccb87……ff2q6ad“,于是就可以回到未來(lái)的某個(gè)版本,就好比我們知道現(xiàn)在的時(shí)間,就能回到現(xiàn)在。下面我們來(lái)演示一下(如下圖):
好了,大家可以看到我們又回到最新版本,嘿嘿。現(xiàn)在你回退到某個(gè)版本中,已經(jīng)關(guān)掉了Git bash。但是呢,你又后悔了,想恢復(fù)到新版本中,但是呢?你又找不到commit id了,那又該怎么辦呢?在Git中,我們當(dāng)時(shí)用$ git reset --hard HEAD^^^,回退到“add readme.txt”版本時(shí),再想恢復(fù)到最新版的 “add a line distributed” 中,必須有commit id才行,這時(shí)我們已經(jīng)關(guān)閉了Git bash。在Git中提供了一個(gè)git reflog命令,是用來(lái)記錄你每一次執(zhí)行的命令,下面我們來(lái)演示一下(如下圖):
嘿嘿,現(xiàn)在我們又可以回去最新版了。好了,到這里我們的回滾版本就講解完成了。下面我們來(lái)說(shuō)一下,工作區(qū)、提交區(qū)/暫存區(qū)(stage/index)、版本庫(kù)。
3.工作區(qū)、提交區(qū)/暫存區(qū)(stage/index)、版本庫(kù)
其實(shí)呢,工作區(qū)、提交區(qū)/暫存區(qū)(stage/index)、版本庫(kù)的概念問(wèn)題,從上圖中就能看的很清楚,本來(lái)不想細(xì)講的,但想想還是說(shuō)一下。Git與其他版本版本控制器其中之一的不同之處就在于有提交區(qū)/暫存區(qū)(stage/index)的概念。下面我們先來(lái)看一下工作區(qū):
其實(shí)呢,工作區(qū)就是我們開發(fā)目錄了,在電腦中是可能看到的,比如我們這里的pro目錄,就是一個(gè)工作區(qū)。大家再來(lái)看一下,下面的兩張圖:
大家可以看到,工作區(qū)中有個(gè)隱藏的目錄“.git”,這個(gè)不是工作區(qū)哦,這個(gè)就是Git的版本庫(kù)。大家再看下面兩張圖:
大家可以看到,在“.git”目錄中有很多文件,其中一個(gè)重要的文件index,就是我們說(shuō)的提交區(qū)/暫存區(qū)(stage/index)。暫存區(qū)(stage, index)是 Git 最重要的概念之一,理解了這個(gè)概念很多 Git 命令就不再那么神秘了。對(duì)于 Git 暫存區(qū)(stage) ,不知道您的感想如何?
“被眼花繚亂的 Git 魔法徹底搞糊涂了?”
“Git 為什么這么折磨人,修改的文件直接提交不就完了么?”
“看不出 Git 這么做有什么好處?”
我認(rèn)為 Git 暫存區(qū)(stage或稱為 index)的設(shè)計(jì)是 Git 最成功的設(shè)計(jì)之一,也是最難理解的一個(gè)設(shè)計(jì)。 在版本庫(kù)(.git)目錄下,有一個(gè) index 文件,相信大家在上圖中已經(jīng)看到了。下面我們好好說(shuō)一說(shuō)他們之間關(guān)系,同樣的我們先看一張圖:
在上圖中,我們可以看到部分 Git 命令是如何影響工作區(qū)和暫存區(qū)(stage/index)的。
圖中左側(cè)為工作區(qū),右側(cè)為版本庫(kù)。在版本庫(kù)中標(biāo)記為 "index" 的區(qū)域是暫存區(qū)(stage/index),標(biāo)記為 "master" 的是 master 分支所代表的目錄樹(關(guān)于分支問(wèn)題在下面的文章中會(huì)詳解)。
圖中我們可以看出此時(shí) "HEAD" 實(shí)際是指向 master 分支的一個(gè)“指針”。所以,圖示的命令中出現(xiàn) HEAD 的地方可以用 master 來(lái)替換(HEAD的概念我們?cè)诤竺娴奈恼轮幸矔?huì)詳解)。
圖中的 objects 標(biāo)識(shí)的區(qū)域?yàn)?Git 的對(duì)象庫(kù),實(shí)際位于 ".git/objects" 目錄下,我們會(huì)在后面的文章中將重點(diǎn)介紹,嘿嘿!。
當(dāng)對(duì)工作區(qū)新增或修改的文件執(zhí)行 "git add" 命令時(shí),暫存區(qū)的目錄樹被更新,同時(shí)工作區(qū)新增或修改的文件內(nèi)容被寫入到對(duì)象庫(kù)中的一個(gè)新的對(duì)象中,而該對(duì)象的ID被記錄在暫存區(qū)的文件索引中。(如上圖)
當(dāng)執(zhí)行提交操作 "git commit" 時(shí),暫存區(qū)的目錄樹寫到版本庫(kù)的對(duì)象庫(kù)(objects)中,master 分支會(huì)做相應(yīng)的更新。即 master 指向的目錄樹就是提交時(shí)暫存區(qū)的目錄樹。(如上圖)
當(dāng)執(zhí)行 "git reset HEAD" 命令時(shí),暫存區(qū)的目錄樹會(huì)被重寫,被 master 分支指向的目錄樹所替換,但是工作區(qū)不受影響。 當(dāng)執(zhí)行 "git rm --cached " 命令時(shí),會(huì)直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變。
當(dāng)執(zhí)行 "git checkout ." 或者 "git checkout -- " 命令時(shí),會(huì)用暫存區(qū)全部或指定的文件替換工作區(qū)的文件。這個(gè)操作很危險(xiǎn),會(huì)清除工作區(qū)中未添加到暫存區(qū)的改動(dòng)。
當(dāng)執(zhí)行 "git checkout HEAD ." 或者 "git checkout HEAD " 命令時(shí),會(huì)用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件。這個(gè)命令也是極具危險(xiǎn)性的,因?yàn)椴坏珪?huì)清除工作區(qū)中未提交的改動(dòng),也會(huì)清除暫存區(qū)中未提交的改動(dòng)。
好了,到這里我們的工作區(qū)、暫存區(qū)、版本庫(kù)就講解到這里了,由于本人能力有限有什么不正確的地方歡迎大家指出。好了,下面我們繼續(xù)講解……
4.修改管理
1).關(guān)于修改
在上面的文章中我們講解了工作區(qū)、暫存區(qū)和版本庫(kù)的概念,有了這些概念有理解。下面我們說(shuō)一說(shuō)為什么Git比其它版本控制軟件優(yōu)秀?嘿嘿,是因?yàn)镚it跟蹤管理的是我們每一次的修改(或操作),而不是文件。比如你新增了一行,這就是一個(gè)修改,刪除了一行,也是一個(gè)修改,更改了某些字符,也是一個(gè)修改,刪了一些又加了一些,也是一個(gè)修改,甚至創(chuàng)建一個(gè)新文件,也算一個(gè)修改。下面我們來(lái)簡(jiǎn)單演示一下:我們先查看一下readme.txt文件,如下圖:
下面我們修改一下readme.txt內(nèi)容,增加一行:Git rest 1.如下圖:
下面我們用 git add 命令提交一下,如下圖:
下面我們?cè)傩薷囊幌聄eadme.txt文件,如下圖:
我們又增加一行 Git test 2. 如下圖:
、
下面我們提交一下,如下圖:
下面我們?cè)俨榭匆幌聽顟B(tài),如下圖:
大家可以看到我們第二次沒(méi)有被提交,怎么會(huì)這樣呢?細(xì)心的博友可以看到我們第二次修改后,直接執(zhí)行 git commit了。沒(méi)有執(zhí)行 git add 命令,前面我們說(shuō)了,當(dāng)你用“git add”命令后,在工作區(qū)的第一次修改被放入暫存區(qū),準(zhǔn)備提交。但是,在工作區(qū)的第二次修改并沒(méi)有放入暫存區(qū),所以,“git commit”只負(fù)責(zé)把暫存區(qū)的修改提交了,也就是第一次的修改被提交了,第二次的修改不會(huì)被提交。下面我們用 git diff 命令查看一下工作區(qū)與版本庫(kù)里面的區(qū)別:
大家可以從圖上看到,我們?cè)黾?Git test 2. 還沒(méi)有提交,嘿嘿!那么第二次修改怎么提交呢?其實(shí)我們?cè)賏dd再commit,就可以了。如下圖:
好了,現(xiàn)在,你又理解了Git是如何跟蹤修改的,每次修改,如果不add到暫存區(qū),那就不會(huì)加入到commit中。那么我們想取消修改的版本,又該怎么取消呢?下面我們繼續(xù)……
2).取消(撤消)修改
下面我們來(lái)講解怎么撤消修改,一般情況下我們是不會(huì)出錯(cuò)的,但是項(xiàng)目比較緊,老是有人在催你(這個(gè)你懂的),突然出錯(cuò)了,我們想取消修改那又怎么辦呢?如下圖:
在你要提交之前,你發(fā)現(xiàn)在有錯(cuò)誤了,應(yīng)該是101。既然錯(cuò)誤發(fā)現(xiàn)得很及時(shí),就可以很容易地糾正它。你可以刪掉最后一行,手動(dòng)把文件恢復(fù)到上一個(gè)版本的狀態(tài)。我信先用git status查看一下,如下圖:
如上圖,Git會(huì)告訴你有你個(gè)文件被修改,你有兩個(gè)選擇,一個(gè)用 git add 提交到暫存區(qū),另一個(gè)是用git checkout可以丟棄工作區(qū)的修改。命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區(qū)的修改全部撤銷,這里有兩種情況:
一種是readme.txt自修改后還沒(méi)有被放到暫存區(qū),現(xiàn)在撤銷修改就回到和版本庫(kù)一模一樣的狀態(tài);
另一種是readme.txt已經(jīng)添加到暫存區(qū)后,又作了修改,現(xiàn)在撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。
總之,就是讓這個(gè)文件回到最近一次git commit或git add時(shí)的狀態(tài)。下面我們來(lái)演示一下,如下圖:
大家可以看一下 readme.txt 文件果然還原到上一個(gè)版本了,嘿嘿!大家注意哦,git checkout -- file命令中的“--”很重要,沒(méi)有“--”,就變成了“創(chuàng)建一個(gè)新分支”的命令,我們?cè)诤竺娴奈恼轮袑⒃敿?xì)講解分支管理。真是禍不單行啊,我們不但程序?qū)戝e(cuò)了,還 git add 到暫存區(qū)了,如下圖:
不管怎么樣,我們先查看一下狀態(tài)吧,如下圖:
大家可以看到Git告訴我們,用 git reset HEAD file 可以把暫存區(qū)中的修改撤消掉,重新放回工作區(qū),如下圖:
git reset命令既可以回退版本,也可以把工作區(qū)的某些文件替換為版本庫(kù)中的文件。當(dāng)我們用HEAD時(shí),表示最新的版本。我們?cè)儆?git status 查看一下發(fā)現(xiàn),現(xiàn)在的暫存區(qū)是干凈的,工作區(qū)有修改。
那說(shuō)明我們撤消成功,嘿嘿!下面我們?cè)賵?zhí)行 git checkout命令撤消工作區(qū)修改,如下圖:
好了,到這里我們終于撤消回來(lái)了,嘿嘿。現(xiàn)在,假設(shè)你不但改錯(cuò)了東西,還從暫存區(qū)提交到了版本庫(kù),怎么辦呢?還記得版本回退一節(jié)嗎?可以回退到上一個(gè)版本。不過(guò),這是有條件的,就是你還沒(méi)有把自己的本地版本庫(kù)推送到遠(yuǎn)程。還記得Git是分布式版本控制系統(tǒng)嗎?我們后面會(huì)講到遠(yuǎn)程版本庫(kù),一旦你把錯(cuò)誤提交推送到遠(yuǎn)程版本庫(kù),你就真的慘了……大家小心就好,哈哈……好了,下面我們來(lái)總結(jié)一下:
當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容,想直接丟棄工作區(qū)的修改時(shí),用命令git checkout -- file。
當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容,還添加到了暫存區(qū)時(shí),想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了第1步,第二步按第1步進(jìn)行操作,就是執(zhí)行一下git checkout -- file。
已經(jīng)提交了不合適的修改到版本庫(kù)時(shí),想要撤銷本次提交,參考我們前面講解的版本回退,不過(guò)前提是沒(méi)有推送到遠(yuǎn)程庫(kù)。嘿嘿,祝你回退成功。
好了,撤消管理我們已經(jīng)講了很多了,下面我們來(lái)說(shuō)一下文件刪除的問(wèn)題,終于快通關(guān)了。嘿嘿……
5.文件刪除
刪除文件就比較簡(jiǎn)單了,我們快速的過(guò)一下了,嘿嘿!下面我們新增加一個(gè)文件并提交到Git版本庫(kù)中,如下圖:
一般我們直接在目錄中把沒(méi)用的文件刪了,或者用rm命令刪了,下面我們來(lái)演示一下:
大家可以看到,我們用 git status 查看一下狀態(tài),現(xiàn)在我們有兩個(gè)選擇,一個(gè)是從版本庫(kù)中刪除該文件,就 git rm 命令刪除掉并用 git commit提交,另一種情況刪錯(cuò)了,因?yàn)榘姹編?kù)里還有所以可以很容易的恢復(fù)。下面我們來(lái)演示一下情況1:
好了,下面我們來(lái)看一下情況2:
git rm 命令用于刪除一個(gè)文件。如果一個(gè)文件已經(jīng)被提交到版本庫(kù),那么你永遠(yuǎn)不用擔(dān)心誤刪,但是要小心,你只能恢復(fù)文件到最新版本,你會(huì)丟失最近一次提交后你修改的內(nèi)容。好了,到這里我們刪除文件就講解完成,嘿嘿。