20180617_Git常用命令3(一些常用的概念和管理git的命令)
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的命令)