【GIT-2】GIT 的基礎教程 工做區暫存區,修改,撤銷,刪除 遠程倉庫

 

【轉載請註明出處!http://my.oschina.net/u/2337744/ git

▓▏工做區和暫存區▕▓ 測試

         工做區(Working Directory)指在電腦裏能夠看到的目錄,好比learngit文件夾就是一個工做區; spa

         版本庫(Repository)指位於工做區中的一個隱藏目錄.git,它不屬於工做區,而是Git的版本庫。 .net

         暫存區(index)指位於版本庫中的index文件,其次,新建一個版本庫Git會爲咱們自動建立第一個分支master和指向master的一個指針HEAD 設計

 

 

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

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

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

由於咱們建立Git版本庫時,Git自動爲咱們建立了惟一一個master分支,因此,如今,git commit就是往master分支上提交更改。 get

你能夠簡單理解爲,須要提交的文件修改統統放到暫存區,而後,一次性提交暫存區的全部修改。 同步

如今,咱們再練習一遍,先對readme.txt作個修改,好比加上一行內容;而後,在工做區新增一個LICENSE文本文件(內容隨便寫)。

先用git status查看一下狀態:

Git很是清楚地告訴咱們,readme.txt被修改了,而LICENSE還歷來沒有被添加過,因此它的狀態是Untracked

如今,使用兩次命令git add,把readme.txtLICENSE都添加後,用git status再查看一下。如今,暫存區的狀態就變成這樣了:

 

 

因此,git add命令實際上就是把要提交的全部修改放到暫存區(Stage),而後,執行git commit就能夠一次性把暫存區的全部修改提交到分支。

一旦提交後,若是你又沒有對工做區作任何修改,那麼工做區就是「乾淨」的:

 

 

暫存區是Git很是重要的概念,弄明白了暫存區,就弄明白了Git的不少操做到底幹了什麼。

▓▏管理修改▕▓

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

什麼是修改?好比新增了一行,這就是一個修改,刪除了一行,也是一個修改,更改了某些字符,也是一個修改,刪了一些又加了一些,也是一個修改,甚至建立一個新文件,也算一個修改。

爲何說Git管理的是修改,而不是文件呢?

實驗測試:

第一步:對readme.txt作一個修改,好比加一行內容,而後用git add readme.txtreadme.txt添加到暫存區中,以後再修改readme.txt並直接提交暫存區文件到git倉庫中。

第二步:提交以後查看git倉庫狀態,發現第二次修改沒有提交。這是由於:

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

咱們前面講了,Git管理的是修改,當你用git add命令後,在工做區的第一次修改被放入暫存區,準備提交,可是,在工做區的第二次修改並無放入暫存區,因此,git commit只負責把暫存區的修改提交了,也就是第一次的修改被提交了,第二次的修改不會被提交。

提交後,用git diff HEAD -- readme.txt或者git diff reademe.txt命令能夠查看工做區和版本庫裏面最新版本的區別。

那怎麼提交第二次修改呢?能夠繼續git addgit commit;也能夠彆着急提交第一次修改,先git add第二次修改,再git commit,就至關於把兩次修改合併後一塊提交了:

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

Git是如何跟蹤修改的,每次修改,若是不add到暫存區,那就不會加入到commit中。

 

▓▏撤銷修改▕▓

當發現準備提交(已經添加到暫存區)的文本文件有錯誤時,咱們能夠刪掉最後一行,手動把文件恢復到上一個版本的狀態。

①設當前readme.txt文件已經修改,可是尚未添加到暫存區中,那麼咱們能夠直接經過Ctrl + Z來撤銷文件的修改而不用恢復到上一個版本狀態。或者直接在Git Bash中使用git checkout – 「文件名稱來撤銷修改。

②假設當前readme.txt文件已經修改並添加到暫存區中了,那麼咱們如何撤回暫存區中的文件呢?

    

 

③假設當前readme.txt文件已經修改並添加到暫存區中了,那麼咱們如何撤回暫存區中的文件呢?

若是這時尚未把本身的本地版本庫推送到遠程,那就可使用版本回溯功能了,經過git reset –hard HEAD^回溯到前一個版本或者使用git reset –hard HEAD~XX回溯到前XX個版本。

若是已經把本地版本庫推送到遠程的話,那就沒法完全撤銷修改了。

 

▓▏刪除文件▕▓

         Git中,刪除也是一個修改操做,咱們實戰一下,先添加一個新文件test.txtGit而且提交.

通常狀況下,你一般直接在文件管理器中把沒用的文件刪了,或者用rm命令刪了。這個時候,Git知道你刪除了文件,所以,工做區和版本庫就不一致了,git status命令會馬上告訴你哪些文件被刪除了。

如今你有兩個選擇,一是確實要從版本庫中刪除該文件,那就用命令git rm刪掉,而且git commit。如今,文件就從版本庫中被刪除了。

另外一種狀況是刪錯了,由於版本庫裏還有呢,因此能夠很輕鬆地把誤刪的文件恢復到最新版本:git checkout實際上是用版本庫裏的版本替換工做區的版本,不管工做區是修改仍是刪除,均可以「一鍵還原」。

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

 

▓▏遠程倉庫▕▓

咱們把遠程倉庫託管到Git@OSC中。建立遠程倉庫須要如下步驟:

第一步:Git@OSC上建立新項目;第二步:生成密鑰對;第三步:Git@OSC上添加公鑰。

         具體過程參見連接:http://my.oschina.net/u/2337744/blog/633221

▓▏同步遠程庫▕▓

第一步:在Git@OSC上創建一個遠程倉庫;

第二步:本地倉庫添加遠程庫;

第三步:將遠程倉庫與本地倉庫鏈接起來;

第四步:進行倉庫的版本推送和版本拉取。             

超連接:http://my.oschina.net/u/2337744/blog/633225

▓▏克隆遠程倉庫▕▓

第一步:在Git@OSC上創建一個遠程倉庫;

第二步:經過git clone SSH類型遠程庫URL命令將遠程倉庫克隆到本地倉庫中,注意克隆下來會生成一個目錄文件夾和git倉庫,因此通常都是項目名稱與整個項目切合,然!@#後克隆時指定項目的父路徑,而後克隆命令會自動生成項目文件夾和本地倉庫。

相關文章
相關標籤/搜索