Git管理的是修改,而非文件本身污它。增加剖踊、刪除、甚至是創(chuàng)建新文件都是修改衫贬。
Git既可以管理修改德澈,也可以撤銷(xiāo)修改。
下面我們分別看看這兩部分內(nèi)容固惯。
管理修改
這個(gè)時(shí)候梆造,可能有人不明白,到底什么是管理修改呢葬毫?我們來(lái)舉個(gè)小栗子看看哈镇辉。
對(duì)之前的love.txt
文件進(jìn)行如下修改:
I love you so much as the mouse like rice.
Do you know?
Every day
Hey,Julie.
Today is Tuesday.
之后添加文件到版本庫(kù),并且查看此時(shí)的狀態(tài)贴捡。
git add love.txt
git status
命令行回復(fù)如下:
On branch master
Changes to be committed:
(use “git reset HEAD <file>…” to unstage)
modified: love.txt
再修改love.txt
如下:
I love you so much as the mouse like rice.
Do you know?
Every day
Hey,Julie.
I know today is Tuesday.
現(xiàn)在忽肛,提交文件到版本庫(kù):
git commit -m “Tuesday”
命令行回復(fù)如下:
[master 7238888] “Tuesday”
1 file changed, 2 insertions(+), 1 deletion(-)
現(xiàn)在,再次查看狀態(tài):
git status
命令行回復(fù)如下:
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: love.txt
no changes added to commit (use “git add” and/or “git commit -a”)
很明顯烂斋,第二次的修改沒(méi)有被提交屹逛。因?yàn)槲覀冊(cè)诘诙涡薷暮鬀](méi)有使用add
命令,修改并沒(méi)有進(jìn)入緩存區(qū)汛骂,所以提交的時(shí)候沒(méi)有第二次修改的內(nèi)容罕模。
現(xiàn)在,我們用git diff HEAD — love.txt
命令查看一下版本庫(kù)中最新版本和工作區(qū)的區(qū)別:
git diff HEAD -- love.txt
命令行回復(fù)如下:
*diff —git a/love.txt b/love.txt*
*index e88da71..8347d74 100644*
*— a/love.txt*
*+++ b/love.txt*
@@ -2,4 +2,4 @@ I love you so much as the mouse like rice.
Do you know?
Every day
Hey,Julie.
-Today is Tuesday.
\ No newline at end of file
+I know today is Tuesday.
\ No newline at end of file
版本庫(kù)中最新版本和工作區(qū)中存放的版本的區(qū)別一目了然帘瞭,第二次修改沒(méi)有被提交淑掌。
撤銷(xiāo)修改
有修改,就有可能犯錯(cuò)蝶念。這一輩子誰(shuí)還沒(méi)有犯糊涂的時(shí)候呢抛腕?知錯(cuò)能改善莫大焉诈悍。咱來(lái)看看如何改這錯(cuò)誤。
假如兽埃,你在love.txt
中無(wú)意添加了一句不太好的言語(yǔ):
I love you so much as the mouse like rice.
Do you know?
Every day
Hey,Julie.
I know today is Tuesday.
I hate Lilei.
過(guò)了一會(huì)兒侥钳,你突然覺(jué)得這樣不妥。怎么辦柄错?咱先git status
看看具體情況再說(shuō)舷夺。
git status
此時(shí),命令行回復(fù)如下信息:
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: love.txt
no changes added to commit (use “git add” and/or “git commit -a”)
其實(shí)售貌,答案已經(jīng)出現(xiàn)啦给猾。Git告訴我們,使用git checkout - <file>
可以丟棄工作區(qū)的修改內(nèi)容颂跨。
我們來(lái)試試:
git checkout --love.txt
此時(shí)查看文件內(nèi)容:
cat love.txt
命令行輸出如下:
I love you so much as the mouse like rice.
Do you know?
Every day
Hey,Julie.
Today is Tuesday.
我們又回到了最初遇見(jiàn)的地方~
這個(gè)時(shí)候有人可能有這樣的疑問(wèn):如果我不僅修改了內(nèi)容敢伸,還提交到了緩存區(qū),想撤銷(xiāo)恒削,怎么破池颈?
所謂車(chē)到山前必有路,咱們?cè)囋嚳磫h~
現(xiàn)在钓丰,我們添加了一行不妥的話躯砰,并且git add
到了緩存區(qū)。此時(shí)携丁,使用cat <file>
命令查看一下文本中的內(nèi)容:
cat love.txt
命令行顯示如下:
I love you so much as the mouse like rice.
Do you know?
Every day
Hey,Julie.
Today is Tuesday.
Lilei is a pig.
不幸中的萬(wàn)幸是琢歇,在commit
之前發(fā)現(xiàn)了錯(cuò)誤,我們?cè)侔l(fā)git status
梦鉴,問(wèn)問(wèn)Git有什么靈丹妙藥李茫。
git status
Git告訴我們?nèi)缦拢?/p>
On branch master
Changes to be committed:
(use “git reset HEAD <file>…” to unstage)
modified: love.txt
Git很清楚地告訴我們,用git reset HEAD <file>
命令可以撤銷(xiāo)掉添加到緩存區(qū)的修改肥橙。
git reset HEAD love.txt
此時(shí)魄宏,命令行輸出:
Unstaged changes after reset:
M love.txt
此時(shí),查看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: love.txt
no changes added to commit (use “git add” and/or “git commit -a”)
發(fā)現(xiàn)了嗎娜庇?如果你此時(shí)不知道需要什么指令的時(shí)候,不妨試一試git status
指令方篮,Git會(huì)告訴你接下來(lái)有可能出現(xiàn)什么情況,并且告訴你應(yīng)該怎么應(yīng)對(duì)励负。
如果此時(shí)藕溅,你不僅添加到緩存區(qū),并且提交到版本庫(kù)继榆,怎么破巾表?請(qǐng)參照第四小節(jié)內(nèi)容(穿越歷史)汁掠。溫故而知新,可以為師矣集币。
本小節(jié)內(nèi)容總結(jié):
- 修改如果不適用
git add
命令進(jìn)行添加到緩存區(qū)(stage)考阱,就不會(huì)被提交到版本庫(kù)中。git diff HEAD -- <fileName>
指令鞠苟,可以查看當(dāng)前版本庫(kù)中的版本和工作區(qū)中的版本有何不同乞榨?- 若修改了工作區(qū)內(nèi)容,還未添加到緩存區(qū)当娱,想撤銷(xiāo)吃既,使用命令
git checkout --<file>
- 若修改了工作區(qū)內(nèi)容,并且已添加到緩存區(qū)跨细,但是未提交鹦倚,想撤銷(xiāo),可以使用命令
git reset HEAD <file>
冀惭。- 如果已經(jīng)將修改提交到了版本庫(kù)中震叙,想撤銷(xiāo),可以參照第四小節(jié)(穿越歷史)內(nèi)容散休。
- 友情提示:如果不知道該使用什么命令捐友,可以使用
git status
,問(wèn)問(wèn)Git溃槐,它會(huì)告訴你接下來(lái)可能出現(xiàn)的情況以及對(duì)應(yīng)的指令匣砖。
好啦。今天就到這里啦昏滴。下節(jié)再見(jiàn)哈~