1. 程式人生 > >20180617_Git常用命令3(一些常用的概念和管理git的命令)

20180617_Git常用命令3(一些常用的概念和管理git的命令)

一鍵還原 inf 丟失 為我 實驗 TE order 換工作 二次

Git常用命令3(一些常用的概念和管理git的命令【工作區、暫存區、管理修改、撤銷修改、刪除文件】)

感謝廖雪峰老師提供的git教程:

傳送門:

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

git裏面的工作區和暫存區

工作區:在你的電腦裏面,你能看到的目錄。

比如:我的learngit文件夾就是一個工作區。

技術分享圖片

版本庫:

工作區有一個隱藏目錄.git,這個不算工作區。而是git的版本庫。

Git的版本庫裏存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。

技術分享圖片

我們把文件往Git版本庫裏添加的時候,是分兩步執行的:

第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;

第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。

因為我們創建Git版本庫時,Git自動為我們創建了唯一一個master分支,所以,現在,git commit就是往master分支上提交更改。

你可以簡單理解為,需要提交的文件修改通通放到暫存區,然後,一次性提交暫存區的所有修改。

練習工作區和暫存區的代碼,我就不演示了:

看廖雪峰老師的例子,傳送門:

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013745374151782eb658c5a5ca454eaa451661275886c6000

常用命令:

--查看git狀態

$ git status

--將文件添加到git

$ git add filename

--將暫存區的文件統一提交到git

$ git commit -m “你的描述”

Git的常用概念:管理修改

為什麽Git比其他版本控制系統設計得優秀,因為Git跟蹤並管理的是修改,而非文件。

你會問,什麽是修改?比如你新增了一行,這就是一個修改,刪除了一行,也是一個修改,更改了某些字符,也是一個修改,刪了一些又加了一些,也是一個修改,甚至創建一個新文件,也算一個修改。

為什麽說Git管理的是修改,而不是文件呢?我們還是做實驗。第一步,對readme.txt做一個修改,比如加一行內容:

技術分享圖片

添加到git:

技術分享圖片

再添加一行內容:

技術分享圖片

提交到git,查看狀態

技術分享圖片

第二次的修改沒有提交。

別激動,我們回顧一下操作過程:

第一次修改 -> git add -> 第二次修改 -> git commit

--查看工作區文件與版本庫文件的區別

git diff HEAD -- readme.txt

把兩次修改合並後一塊提交了:

第一次修改 -> git add -> 第二次修改 -> git add -> git commit

好,現在,把第二次修改提交了。

查看狀態:

技術分享圖片

Vim命令講解:

技術分享圖片

初始進入vim編輯器為命令模式:

按I,進入編輯模式。

進入編輯模式最下面會有提醒,如按下i,最下面會提醒-- INSERT --

按esc,回到命令模式。

在按:wq,退出vim編輯器。

:wq 保存文件並退出

Git管理之撤銷修改

場景1:在工作區修改了文件,但沒有將文件添加到git暫存區。

使用:

$ git checkout -- filename

技術分享圖片

git checkout -- file命令中的--很重要,沒有--,就變成了“切換到另一個分支”的命令,我們在後面的分支管理中會再次遇到git checkout命令。

再次查看,文件被還原了。

技術分享圖片

場景2:在工作區修改了文件,並且將文件添加到git暫存區。

用命令git reset HEAD <file>可以把暫存區的修改撤銷掉(unstage),重新放回工作區:

$ git reset HEAD <file>

git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。

修改後的readme.txt添加到了暫存區。

技術分享圖片

使用命令git reset HEAD <file>可以把暫存區的修改撤銷掉

技術分享圖片

再回到場景1,撤銷掉工作區的修改。

技術分享圖片

查看git狀態,是幹凈的

技術分享圖片

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。

現在,假設你不但改錯了東西,還從暫存區提交到了版本庫,怎麽辦呢?還記得版本回退一節嗎?可以回退到上一個版本。不過,這是有條件的,就是你還沒有把自己的本地版本庫推送到遠程。還記得Git是分布式版本控制系統嗎?我們後面會講到遠程版本庫,一旦你把stupid boss提交推送到遠程版本庫,你就真的慘了……

Git管理之刪除文件

創建一個新文件test.txt,

技術分享圖片

查看test.txt文件

技術分享圖片

將test.txt添加到git,並提交。

技術分享圖片

刪除test.txt

$ rm test.txt

技術分享圖片

查看狀態

這個時候,Git知道你刪除了文件,因此,工作區和版本庫就不一致了,git status命令會立刻告訴你哪些文件被刪除了:

技術分享圖片

現在你有兩個選擇,一是確實要從版本庫中刪除該文件,那就用命令git rm刪掉,並且git commit

從版本庫中刪除test.txt文件

$ git rm test.txt

技術分享圖片

小提示:先手動刪除文件,然後使用git rm <file>和git add<file>效果是一樣的。

第二種情況是刪錯了

因為版本庫裏還有呢,所以可以很輕松地把誤刪的文件恢復到最新版本:

$ git checkout -- test.txt

git checkout其實是用版本庫裏的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。

命令git rm用於刪除一個文件。如果一個文件已經被提交到版本庫,那麽你永遠不用擔心誤刪,但是要小心,你只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容

註意,如果你的版本庫的文件也以及刪除,就不能使用這種方法了。

(╥╯^╰╥)我的刪除操作已經提交到git了。不能從版本庫恢復了。

技術分享圖片

這時,就又要參考版本退回一節了,這裏不提供傳送門了。

技術分享圖片

技術分享圖片

20180617_Git常用命令3(一些常用的概念和管理git的命令)