(二)Git--工作區(qū)和暫存區(qū)赖淤、管理修改與撤銷

Git和其他版本控制系統(tǒng)如SVN的一個(gè)不同之處就是有暫存區(qū)的概念

工作區(qū)

就是在你電腦里能看到的目錄.使用git init初始化的那個(gè)目錄

版本庫

工作區(qū)有一個(gè)隱藏目錄.git,這個(gè)不算工作區(qū)而是Git的版本庫
Git的版本庫中存了很多東西佣蓉,其中非常重要的就是名為stage(或者叫index)的暫存區(qū)蹦浦,還有一個(gè)Git為我們自動(dòng)創(chuàng)建的默認(rèn)master分支,以及一個(gè)指向master的指針叫HEAD

在我們把文件往Git版本庫中添加的時(shí)候,先執(zhí)行的git add操作是把文件加入到暫存區(qū),然后執(zhí)行git commit提交修改,是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支
因此我們平時(shí)的操作可以理解為,把需要提交的文件全都放到暫存區(qū),然后一次性提交暫存區(qū)的所有修改

管理修改

Git在版本控制之所以設(shè)計(jì)的優(yōu)秀,因?yàn)镚it跟蹤并管理的是修改而非文件

那么什么是修改呢?

eg:比如你新增了一行,這就是一個(gè)修改,刪除一行,更改或者刪除某個(gè)字符都算是一個(gè)修改,并且新增或者刪除了一個(gè)文件,也算是一個(gè)修改

為了說明Git管理的是修改而不是文件,實(shí)驗(yàn)如下:
添加一行內(nèi)容:

$ cat readme.txt
Spring-boot quickstart microservice!
This is a spring-boot  combined with mongoDB example.
Test update file
Git tracks change

然后進(jìn)行添加git add

$ git add readme.txt
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
        modified:   readme.txt

然后,在進(jìn)行修改:

$ cat readme.txt
Spring-boot quickstart microservice!
This is a spring-boot  combined with mongoDB example.
Test update file
Git tracks change

提交:

$ git commit -m "git tracks changes"
[master 8b33073] git tracks changes
 1 file changed, 1 insertion(+), 1 deletion(-)

提交后,在查看狀態(tài):

$ 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")

這時(shí)就會(huì)發(fā)現(xiàn),修改的文件沒有被提交,我們看一下這個(gè)過程:
第一次修改 -> git add -> 第二次修改 -> git commit
因?yàn)榈诙蔚男薷牟]有執(zhí)行git add操作加入到暫存區(qū),而是執(zhí)行了git commit操作,這時(shí)只會(huì)把暫存區(qū)的修改提交到當(dāng)前分支,所以第一次的修改被提交了,而第二次的修改不會(huì)被提交,這樣就證明Git管理的是修改而并非文件

小結(jié):每次修改,如果不add到暫存區(qū),那就不會(huì)加入到commit

撤銷修改

如果我們?cè)谛薷奈募?出現(xiàn)了錯(cuò)誤,但是發(fā)現(xiàn)及時(shí),我們就可以手動(dòng)把文件恢復(fù)到上一個(gè)版本的狀態(tài),使用git status查看:

$ 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")

你可以發(fā)現(xiàn),Git告訴你,git checkout -- file可以丟棄工作區(qū)的修改:
$ git checkout -- readme.txt
命令git checkout -- file意思就是,把file文件在工作區(qū)的修改全部丟棄,這里會(huì)有兩種情況:

  1. 一種是file自修改后還沒有被放到暫存區(qū),現(xiàn)在,撤銷修改就回到和版本庫當(dāng)前分支一模一樣的狀態(tài);
  2. 一種是file已經(jīng)被添加到暫存區(qū)后,又進(jìn)行了修改,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)之后file的狀態(tài);
    總之,就是讓這個(gè)文件回到最近一次git commit或者git add時(shí)的狀態(tài).
    git checkout -- file命令中的--很重要,如果沒有--,就變成了"切換到另一個(gè)分支"的命令;

現(xiàn)在假設(shè)某天凌晨2.30,你昏昏欲睡,寫了一些胡話,還git add到暫存區(qū)了:

$ cat readme.txt
Spring-boot quickstart microservice!
This is a spring-boot  combined with mongoDB example.
Test update file
Git tracks change
my boss is still prefers SVN!
my boss is stupid!
$ git add readme.txt

慶幸的是,在commit你發(fā)現(xiàn)了這個(gè)問題帅刀。用git status查看一下,修改只是添加到了暫存區(qū),還沒有提交:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   readme.txt

Git提示我們,可以使用命令git reset HEAD file把暫存區(qū)的修改撤銷掉,重新放回工作區(qū):

$ git reset HEAD  readme.txt
Unstaged changes after reset:
M       readme.txt

git reset命令既可以回退版本,也可以把暫存區(qū)的修改回退到工作區(qū).當(dāng)我們用HEAD時(shí),表示當(dāng)前分支最新的版本,再用git status查看一下:

$ 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")

現(xiàn)在暫存區(qū)是干凈的,工作區(qū)有修改.
上面介紹了丟棄工作區(qū)的修改:

$ git checkout -- readme.txt

$ git status
# On branch master
nothing to commit (working directory clean)

這時(shí),四海八荒終于歸于平靜了.

假設(shè)如果你不但改錯(cuò)了東西,而且還提交到了版本庫,怎么辦呢?參考上一篇中版本回退,可以回到上一個(gè)版本沛慢。不過,這個(gè)操作也是有條件的,就是你還沒有把自己的本地版本庫推送到遠(yuǎn)程吵护。

小結(jié)

  • 當(dāng)你改亂了工作區(qū)的某個(gè)文件內(nèi)容盒音,想直接丟棄工作區(qū)的修改竖配,用命令git checkout -- file;
  • 當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容,還添加到了暫存區(qū)時(shí),想丟棄修改,分兩步,第一步用命令git reset HEAD file.就回到了上面的情況,第二步按上面的場(chǎng)景進(jìn)行操作;
  • 已經(jīng)提交了不合適的修改到版本庫,想要撤銷本次提交,參考版本回退這篇介紹,不過前提是沒有推送到遠(yuǎn)程版本庫;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市里逆,隨后出現(xiàn)的幾起案子进胯,更是在濱河造成了極大的恐慌,老刑警劉巖原押,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胁镐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诸衔,警方通過查閱死者的電腦和手機(jī)盯漂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笨农,“玉大人就缆,你說我怎么就攤上這事≮艘啵” “怎么了竭宰?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長份招。 經(jīng)常有香客問我切揭,道長,這世上最難降的妖魔是什么锁摔? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任廓旬,我火速辦了婚禮,結(jié)果婚禮上谐腰,老公的妹妹穿的比我還像新娘孕豹。我一直安慰自己,他們只是感情好十气,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布励背。 她就那樣靜靜地躺著,像睡著了一般桦踊。 火紅的嫁衣襯著肌膚如雪椅野。 梳的紋絲不亂的頭發(fā)上终畅,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天籍胯,我揣著相機(jī)與錄音,去河邊找鬼离福。 笑死杖狼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妖爷。 我是一名探鬼主播蝶涩,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼理朋,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了绿聘?” 一聲冷哼從身側(cè)響起嗽上,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎熄攘,沒想到半個(gè)月后兽愤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挪圾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年浅萧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哲思。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洼畅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棚赔,到底是詐尸還是另有隱情帝簇,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布靠益,位于F島的核電站己儒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捆毫。R本人自食惡果不足惜闪湾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绩卤。 院中可真熱鬧途样,春花似錦、人聲如沸濒憋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凛驮。三九已至裆站,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間黔夭,已是汗流浹背宏胯。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留本姥,地道東北人肩袍。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像婚惫,于是被迫代替她去往敵國和親氛赐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子魂爪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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

  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,458評(píng)論 1 26
  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,652評(píng)論 4 54
  • 2017年了呀,二月份就要過完了牲芋。春天來了呀粗井,都穿上毛衣了。我還是啥也沒有實(shí)踐街图。想東西都沒有了靈感浇衬。人是越來越鈍了...
    天賦還沒用到閱讀 296評(píng)論 1 1
  • 三月份的長春 總是會(huì)突然下雪 偶爾看看窗外 早已是飛絮滿天 可我扔喜歡雪 曾做過許多與雪有關(guān)的夢(mèng) 雪下有花 卻只是...
    昔日隨筆閱讀 230評(píng)論 0 0