手把手教你使用Git

最近打算研究研究Docker。對於Docker的很多資料、鏡像都有開源的可以下載,而且基於Docker的部署方法和環境我們先要了解一下Git版本控制系統。以前一直都是用的SVN,現在學習了Git後,發現功能更強大。

一:Git是什麼?

       Git是目前世界上最先進的分佈式版本控制系統。

二:SVN與Git的最主要的區別?

      SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而幹活的時候,用的都是自己的電腦,所以首先要從中央服務器哪裏得到最新的版本,然後幹活, 幹完後,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作,如果在局域網還可以,帶寬夠大,速度夠快,如果在互聯網下,如果網 速慢的話,就納悶了。

      Git是分佈式版本控制系統,那麼它就沒有中央服務器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因爲版本都是在自己的電腦 上。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各 自的修改推送給對方,就可以互相看到對方的修改了。

三:如何安裝Git?

      不管是哪個平臺安裝Git應該是很容易的,網上資料很多,這裏就不詳述了,至少得Mac環境是自帶的。

四:如何操作?

     一:創建版本庫。

     什麼是版本庫?版本庫又名倉庫,英文名repository,你可以簡單的理解一個目錄,這個目錄裏面的所有文件都可以被Git管理起來,每個文件的修改,刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻還可以將文件”還原”。

    所以創建一個版本庫也非常簡單,如下我是D盤 –> www下 目錄下新建一個testgit版本庫。

   

pwd 命令是用於顯示當前的目錄。

      1. 通過命令 git init 把這個目錄變成git可以管理的倉庫,如下:

     這時候你當前testgit目錄下會多了一個.git的目錄,這個目錄是Git來跟蹤管理版本的,沒事千萬不要手動亂改這個目錄裏面的文件,否則,會把git倉庫給破壞了。如下:

    

      2. 把文件添加到版本庫中。

          首先要明確下,所有的版本控制系統,只能跟蹤文本文件的改動,比如txt文件,網頁,所有程序的代碼等,Git也不列外,版本控制系統可以告訴你每次的改 動,但是圖片,視頻這些二進制文件,雖能也能由版本控制系統管理,但沒法跟蹤文件的變化,只能把二進制文件每次改動串起來,也就是知道圖片從1kb變成 2kb,但是到底改了啥,版本控制也不知道。

    下面先看下demo如下演示:

     我在版本庫testgit目錄下新建一個記事本文件 readme.txt 內容如下:11111111

     第一步:使用命令 git add readme.txt添加到暫存區裏面去。如下:

    

   如果和上面一樣,沒有任何提示,說明已經添加成功了。

   第二步:用命令 git commit告訴Git,把文件提交到倉庫。

   

  現在我們已經提交了一個readme.txt文件了,我們下面可以通過命令git status來查看是否還有文件未提交,如下:

  

 說明沒有任何文件未提交,但是我現在繼續來改下readme.txt內容,比如我在下面添加一行2222222222內容,繼續使用git status來查看下結果,如下:

 

上面的命令告訴我們 readme.txt文件已被修改,但是未被提交的修改。

接下來我想看下readme.txt文件到底改了什麼內容,如何查看呢?可以使用如下命令:

git diff readme.txt 如下:

 

如上可以看到,readme.txt文件內容從一行11111111改成 二行 添加了一行22222222內容。

知道了對readme.txt文件做了什麼修改後,我們可以放心的提交到倉庫了,提交修改和提交文件是一樣的2步(第一步是git add  第二步是:git commit)。

如下:

 

二:版本回退:

     如上,我們已經學會了修改文件,現在我繼續對readme.txt文件進行修改,再增加一行

內容爲33333333333333.繼續執行命令如下:

   

現在我已經對readme.txt文件做了三次修改了,那麼我現在想查看下歷史記錄,如何查呢?我們現在可以使用命令 git log 演示如下所示:

  

    git log命令顯示從最近到最遠的顯示日誌,我們可以看到最近三次提交,最近的一次是,增加內容爲333333.上一次是添加內容222222,第一次默認是 111111.如果嫌上面顯示的信息太多的話,我們可以使用命令 git log –pretty=oneline 演示如下:

  

    現在我想使用版本回退操作,我想把當前的版本回退到上一個版本,要使用什麼命令呢?可以使用如下2種命令,第一種是:git reset  –hard HEAD^ 那麼如果要回退到上上個版本只需把HEAD^ 改成 HEAD^^ 以此類推。那如果要回退到前100個版本的話,使用上面的方法肯定不方便,我們可以使用下面的簡便命令操作:git reset  –hard HEAD~100 即可。未回退之前的readme.txt內容如下:

  

如果想回退到上一個版本的命令如下操作:

再來查看下 readme.txt內容如下:通過命令cat readme.txt查看

可以看到,內容已經回退到上一個版本了。我們可以繼續使用git log 來查看下歷史記錄信息,如下:

我們看到 增加333333 內容我們沒有看到了,但是現在我想回退到最新的版本,如:有333333的內容要如何恢復呢?我們可以通過版本號回退,使用命令方法如下:

git reset  –hard 版本號 ,但是現在的問題假如我已經關掉過一次命令行或者333內容的版本號我並不知道呢?要如何知道增加3333內容的版本號呢?可以通過如下命令即可獲取到版本號:git reflog  演示如下:

通過上面的顯示我們可以知道,增加內容3333的版本號是 6fcfc89.我們現在可以命令

git reset  –hard 6fcfc89來恢復了。演示如下:

可以看到 目前已經是最新的版本了。

三:理解工作區與暫存區的區別?

     工作區:就是你在電腦上看到的目錄,比如目錄下testgit裏的文件(.git隱藏目錄版本庫除外)。或者以後需要再新建的目錄文件等等都屬於工作區範疇。

      版本庫(Repository):工作區有一個隱藏目錄.git,這個不屬於工作區,這是版本庫。其中版本庫裏面存了很多東西,其中最重要的就是stage(暫存區),還有Git爲我們自動創建了第一個分支master,以及指向master的一個指針HEAD。

我們前面說過使用Git提交文件到版本庫有兩步:

  第一步:是使用 git add 把文件添加進去,實際上就是把文件添加到暫存區。

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

我們繼續使用demo來演示下:

我們在readme.txt再添加一行內容爲4444444,接着在目錄下新建一個文件爲test.txt 內容爲test,我們先用命令 git status來查看下狀態,如下:

現在我們先使用git add 命令把2個文件都添加到暫存區中,再使用git status來查看下狀態,如下:

接着我們可以使用git commit一次性提交到分支上,如下:

四:Git撤銷修改和刪除文件操作。

一:撤銷修改:

    比如我現在在readme.txt文件裏面增加一行 內容爲555555555555,我們先通過命令查看如下:

在我未提交之前,我發現添加5555555555555內容有誤,所以我得馬上恢復以前的版本,現在我可以有如下幾種方法可以做修改:

第一:如果我知道要刪掉那些內容的話,直接手動更改去掉那些需要的文件,然後add添加到暫存區,最後commit掉。

第二:我可以按以前的方法直接恢復到上一個版本。使用 git reset  –hard HEAD^

但是現在我不想使用上面的2種方法,我想直接想使用撤銷命令該如何操作呢?首先在做撤銷之前,我們可以先用 git status 查看下當前的狀態。如下所示:

可以發現,Git會告訴你,git checkout  — file 可以丟棄工作區的修改,如下命令:

git checkout  —  readme.txt,如下所示:

命令 git checkout –readme.txt 意思就是,把readme.txt文件在工作區做的修改全部撤銷,這裏有2種情況,如下:

  1. readme.txt自動修改後,還沒有放到暫存區,使用 撤銷修改就回到和版本庫一模一樣的狀態。
  2. 另外一種是readme.txt已經放入暫存區了,接着又作了修改,撤銷修改就回到添加暫存區後的狀態。

對於第二種情況,我想我們繼續做demo來看下,假如現在我對readme.txt添加一行 內容爲6666666666666,我git add 增加到暫存區後,接着添加內容7777777,我想通過撤銷命令讓其回到暫存區後的狀態。如下所示:

  

注意:命令git checkout — readme.txt 中的 — 很重要,如果沒有 — 的話,那麼命令變成創建分支了。

二:刪除文件。

     假如我現在版本庫testgit目錄添加一個文件b.txt,然後提交。如下:

  

如上:一般情況下,可以直接在文件目錄中把文件刪了,或者使用如上rm命令:rm b.txt ,如果我想徹底從版本庫中刪掉了此文件的話,可以再執行commit命令 提交掉,現在目錄是這樣的,

 

只要沒有commit之前,如果我想在版本庫中恢復此文件如何操作呢?

可以使用如下命令 git checkout  — b.txt,如下所示:

再來看看我們testgit目錄,添加了3個文件了。如下所示:

五:遠程倉庫。

     在瞭解之前,先註冊github賬號,由於你的本地Git倉庫和github倉庫之間的傳輸是通過SSH加密的,所以需要一點設置:

     第一步:創建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果有的話,直接跳過此如下命令,如果沒有的話,打開命令行,輸入如下命令:

ssh-keygen  -t rsa –C “[email protected]”, 由於我本地此前運行過一次,所以本地有。

id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

第二步:登錄github,打開” settings”中的SSH Keys頁面,然後點擊“Add SSH Key”,填上任意title,在Key文本框裏黏貼id_rsa.pub文件的內容。

點擊 Add Key,你就應該可以看到已經添加的key。

    如果你使用的不是github,而是Oschina,配置也是一樣的。

六:同步遠程的Git版本庫

    命令很簡單,只需要創建一個目錄,然後 git clone https://xxxxxxx.git,然後就都搞定了。

    後續可以執行git pull更新遠程的版本庫到本地,也可以git push origin master,將本地版本更新到遠程版本庫中。


Git基本常用命令如下:

   mkdir:         XX (創建一個空目錄 XX指目錄名)

   pwd:          顯示當前目錄的路徑。

   git init          把當前的目錄變成可以管理的git倉庫,生成隱藏.git文件。

   git add XX       把xx文件添加到暫存區去。

   git commit –m “XX”  提交文件 –m 後面的是註釋。

   git status        查看倉庫狀態

   git diff  XX      查看XX文件修改了那些內容

   git log          查看歷史記錄

   git reset  –hard HEAD^ 或者 git reset  –hard HEAD~ 回退到上一個版本

                        (如果想回退到100個版本,使用git reset –hard HEAD~100 )

   cat XX         查看XX文件內容

   git reflog       查看歷史記錄的版本號id

   git checkout — XX  把XX文件在工作區的修改全部撤銷。

   git rm XX          刪除XX文件

   git remote add origin https://github.com/aiharry2007/mycloud.git 關聯一個遠程庫

   git push –u(第一次要用-u 以後不需要) origin master 把當前master分支推送到遠程庫

   git clone https://github.com/aiharry2007/mycloud.git 從遠程庫中克隆

   git checkout –b dev  創建dev分支 並切換到dev分支上

   git branch  查看當前所有的分支

   git checkout master 切換回master分支

   git merge dev    在當前的分支上合併dev分支

   git branch –d dev 刪除dev分支

   git branch name  創建分支

   git stash 把當前的工作隱藏起來 等以後恢復現場後繼續工作

   git stash list 查看所有被隱藏的文件列表

   git stash apply 恢復被隱藏的文件,但是內容不刪除

   git stash drop 刪除文件

   git stash pop 恢復文件的同時 也刪除文件

   git remote 查看遠程庫的信息

   git remote –v 查看遠程庫的詳細信息

   git push origin master  Git會把master分支推送到遠程庫對應的遠程分支上

附上我的兩個版本庫

GitHub:https://github.com/aiharry2007/mycloud.git

地址:https://github.com/aiharry2007/mycloud


OsChina.net:https://git.oschina.net/xiaopangdou/mycloud.git

地址:https://git.oschina.net/xiaopangdou/mycloud


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章