第三章 時光機(jī)穿梭

1. 版本回退

修改之前readme.txt的內(nèi)容,運(yùn)行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命令可以時刻掌握倉庫當(dāng)前狀態(tài)。以上結(jié)果表明,teadme.txt已經(jīng)被改動了,但還沒有準(zhǔn)備提交的修改。

如何查看修改內(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命令查看版本歷史紀(jì)錄:

$ 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

提示:前面那一串?dāng)?shù)字是commit id的版本號。

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

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

首先,git得需要知道版本號。在git中,用HEAD表示當(dāng)前版本,上一個就是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)換之前的版本呢?

那得找到那一串?dāng)?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指向的版本就是當(dāng)前版本,因此可以用命令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添加文件,實(shí)際上是把文件修改添加到暫存區(qū);

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

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


4. 管理修改

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

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


5.撤銷修改

當(dāng)修改了文件后,查看當(dāng)前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. 當(dāng)你不僅該亂了內(nèi)容,還添加到了暫存區(qū)時,還想丟棄修改。有兩步:

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

2. 用命令git checkout -- file恢復(fù)

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


6. 刪除文件

利用rm file可以刪除文件。

刪除后用git commit確認(rèn)刪除,誤刪用git checkout恢復(fù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,843評論 4 54
  • 感謝遇到彭彭,從她的敘述里看到了她的從長計議以及步驟清晰,尤其是每一級別的進(jìn)階都嚴(yán)格準(zhǔn)入,認(rèn)真的態(tài)度抑制了懈怠玩票...
    喀秋莎寶閱讀 136評論 0 0
  • 感謝我的簡書好友龍七七帶我們大家一起進(jìn)入禪繞畫的美妙世界。這是我的禪繞畫繪制過程,歡迎大家交流。 禪繞畫基本工具:...
    doooodles閱讀 855評論 3 4
  • 查看內(nèi)核版本 # uname -r3.10.0-327.el7.x86_64 查看主機(jī)名 # hostnamelo...
    古寒飛閱讀 402評論 0 0
  • 奧巴馬說:“學(xué)習(xí)的錢一定要花,我一個黑人能在美國白人世界站住腳,能有今天完全靠學(xué)習(xí)高人的智慧!學(xué)習(xí)不能決定你的起點(diǎn)...
    大野的竹閱讀 397評論 2 2

友情鏈接更多精彩內(nèi)容