第三章 時光機穿梭

1. 版本回退

修改之前readme.txt的內(nèi)容锐想,運行g(shù)it status命令查看結(jié)果

$ git status

On branch master

Changes not staged for commit:

??(use "git add ..." to update?what will be committed)

??(use "git checkout -- ..."?to?discard changes in?working directory)


????modified: ??readme.txt

no?changes added to?commit?(use "git add"?and/or?"git commit -a")

Git status命令可以時刻掌握倉庫當前狀態(tài)伺通。以上結(jié)果表明,teadme.txt已經(jīng)被改動了番川,但還沒有準備提交的修改忘朝。

如何查看修改內(nèi)容呢违孝,使用git diff命令查看

$ git diff readme.txt

diff --git a/readme.txt b/readme.txt

index 46d49bf..9247db6 100644

--- a/readme.txt

+++ b/readme.txt@@ -1,2 +1,2 @@

-Git is?a version control system.

+Git is?a distributed version control system.

?Git is?free software.

Git diff(查看difference),了解到修改詳情后毛嫉,需要重新提交文件到倉庫

$ git add readme.txt

$ git commit?-m "add distributed"

[master e475afc] add?distributed

?1?file changed, 1?insertion(+), 1?deletion(-)

提交后查看倉庫狀態(tài):

$ git status

On branch master

nothing to commit, working tree clean

總結(jié):

Git status查看文件是否被修改,查看倉庫狀態(tài)妇菱。

Git diff查看修改內(nèi)容承粤。


2. 版本回退

在Git中暴区,我們可以用git log命令查看版本歷史紀錄:

$ git log

commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)

Author: Michael Liao

Date: ??Fri May 18 21:06:15 2018 +0800


????append GPL


commit e475afc93c209a690c39c13a46716e8fa000c366

Author: Michael Liao

Date: ??Fri May 18 21:03:36 2018 +0800


????add distributed


commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0

Author: Michael Liao

Date: ??Fri May 18 20:59:18 2018 +0800


????wrote a readme file

如果嫌輸出信息太多,看得眼花繚亂的密任,可以試試加上--pretty=oneline參數(shù):

$ git log --pretty=oneline

c585e4a6ae21136fddf3fe6e447aa8427b31fc78 (HEAD -> master)?recommit

1f60bf7e092fd94c9445d2a0743654e6603ad30e?recommit

9b6fa8aef3e22b607e03d8c0821e24f1581465b6?there is 4 files

29b5091840a99a2cd7bf5681bd9c66ff704b0d58?wrote a readme file

提示:前面那一串數(shù)字是commit id的版本號颜启。

每次提交一個新版本,實際上Git就會把他們自動串成一條時間線浪讳。如果使用可視化工具查看Git歷史缰盏,就可以更清楚的看到時間線。

如何將文件回退到上一個版本呢淹遵?

首先口猜,git得需要知道版本號。在git中透揣,用HEAD表示當前版本济炎,上一個就是HEAD^,上上一個就是HEAD^^,上上上一個就是HEAD^^^辐真,往上100個版本HEAD~100须尚。

現(xiàn)在要回退到上一個版本,就可以用git reset命令

student30@CN01VRIAPC30 MINGW64 /g/learngit?(master)

$ git reset --hard HEAD^

HEAD is now at 9b6fa8a there is 4 files

如果想回溯到轉(zhuǎn)換之前的版本呢侍咱?

那得找到那一串數(shù)字的號碼耐床,然后通過reset版本號就可以了。

$ git reset --hard c585e4a6ae21136fddf3fe6e447aa8427b31fc78

HEAD is now at c585e4a recommit

如果版本號丟失了楔脯,找不到怎么辦呢撩轰?

在Git中,提供了一個命令git reflog用來記錄你的每一次命令:

student30@CN01VRIAPC30 MINGW64 /g/learngit?(master)

$ git reflog

c585e4a (HEAD -> master)?HEAD@{0}: reset: moving to c585e4a6ae21136fddf3fe6e447aa8427b31fc78

9b6fa8a?HEAD@{1}: reset: moving to HEAD^

1f60bf7?HEAD@{2}: reset: moving to HEAD^

c585e4a (HEAD -> master)?HEAD@{3}: commit: recommit

1f60bf7?HEAD@{4}: commit: recommit

9b6fa8a?HEAD@{5}: commit: there is 4 files

29b5091?HEAD@{6}: commit (initial): wrote a readme file


總結(jié):

HEAD指向的版本就是當前版本昧廷,因此可以用命令git reset --hard commit_id來版本穿梭

穿梭前堪嫂,用git log查看提交歷史,確定回到哪個版本

要重返穿梭前木柬,可以采用git reflog查看命令歷史皆串,以便找到回到的版本


3. 工作區(qū)和暫存區(qū)

工作區(qū)(working directory),就是電腦里能看到的目錄弄诲,比如learngit文件夾就是一個工作區(qū)愚战。

版本庫(Repository),工作區(qū)中一個隱藏目錄.git齐遵,這個不算工作區(qū)寂玲,他是Git的版本庫。

版本庫中很多重要的東西梗摇,其中最重要的稱為index(或stage)的暫存區(qū)拓哟,還有Git為我們自動創(chuàng)價的第一這分支master,以及指向master的一個指針叫HEAD伶授。

之前往git版本庫中添加文件時是分兩步執(zhí)行的:

第一步git add添加文件断序,實際上是把文件修改添加到暫存區(qū)流纹;

第二步使用git commit提交更改,實際是把暫存區(qū)內(nèi)容提交到當前分支违诗。

所以說漱凝,git add命令實際上十八要提交的所有修改放到暫存區(qū)(index),然后執(zhí)行g(shù)it commit就可以一次性把暫存區(qū)的所有修改提交到分支诸迟。


4. 管理修改

Git比其他版本控制器優(yōu)秀的一大原因是茸炒,Git跟蹤的是修改記錄而并非文件。

每次修改阵苇,如果不用git add到暫存區(qū)壁公,那就不會加入到commit中。


5.撤銷修改

當修改了文件后绅项,查看當前status你會發(fā)現(xiàn)紊册,Git告訴你,git checkout --file可以丟棄工作取得修改:

$ git checkout -- readme.txt

以上命令意為快耿,把readme.txt文件在工作區(qū)的修改全部撤銷囊陡,有兩種情況:

1. readme.txt自修改后還沒有被放到暫存區(qū),現(xiàn)在撤銷修改就回到和版本庫一模一樣的狀態(tài)掀亥。

2. readme.txt已經(jīng)添加到暫存區(qū)后关斜,又做了修改,現(xiàn)在撤銷修改就回到添加到暫存區(qū)后的狀態(tài)铺浇。

如果已經(jīng)把readme.txt加入暫存區(qū)怎么辦?

1.用命令git reset HEAD 可以把暫存區(qū)的修改撤銷(unstage)垛膝,重新放回工作區(qū)鳍侣。

$ git reset?HEAD readme.txt

Unstaged changes after reset:

M ???readme.txt

2. 然后用checkout丟棄工作區(qū)的修改

$ git checkout -- readme.txt


$ git status

On branch master

nothing to commit, working tree clean

總結(jié):

1. 如果該亂了工作區(qū)某個文件內(nèi)容,想直接丟棄工作區(qū)的修改時吼拥,用命令git checkout -- file

2. 當你不僅該亂了內(nèi)容倚聚,還添加到了暫存區(qū)時,還想丟棄修改凿可。有兩步:

1. 用命令git reset HEAD 惑折, 就回到了場景一

2. 用命令git checkout -- file恢復

3.已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交枯跑,只能版本回退惨驶,前提是沒有推送到遠程庫。


6. 刪除文件

利用rm file可以刪除文件敛助。

刪除后用git commit確認刪除粗卜,誤刪用git checkout恢復

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纳击,隨后出現(xiàn)的幾起案子续扔,更是在濱河造成了極大的恐慌攻臀,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纱昧,死亡現(xiàn)場離奇詭異刨啸,居然都是意外死亡,警方通過查閱死者的電腦和手機识脆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門设联,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人存璃,你說我怎么就攤上這事仑荐。” “怎么了纵东?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵粘招,是天一觀的道長。 經(jīng)常有香客問我偎球,道長洒扎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任衰絮,我火速辦了婚禮袍冷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猫牡。我一直安慰自己胡诗,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布淌友。 她就那樣靜靜地躺著煌恢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪震庭。 梳的紋絲不亂的頭發(fā)上瑰抵,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音器联,去河邊找鬼二汛。 笑死,一個胖子當著我的面吹牛拨拓,可吹牛的內(nèi)容都是我干的肴颊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼渣磷,長吁一口氣:“原來是場噩夢啊……” “哼苫昌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤祟身,失蹤者是張志新(化名)和其女友劉穎奥务,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袜硫,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡氯葬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了婉陷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帚称。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖秽澳,靈堂內(nèi)的尸體忽然破棺而出闯睹,到底是詐尸還是另有隱情,我是刑警寧澤担神,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布楼吃,位于F島的核電站,受9級特大地震影響妄讯,放射性物質(zhì)發(fā)生泄漏孩锡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一亥贸、第九天 我趴在偏房一處隱蔽的房頂上張望躬窜。 院中可真熱鬧,春花似錦炕置、人聲如沸荣挨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽垦沉。三九已至,卻和暖如春仍劈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寡壮。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工贩疙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人况既。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓这溅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棒仍。 傳聞我的和親對象是個殘疾皇子悲靴,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

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