git init //新建一個空倉庫,倉庫就是當前目錄 git init [project-name] //在當前目錄新建一個peoject-name倉庫,至關於在裏面新建了一個文件夾
git log //顯示操做歷史記錄 git log --pretty=oneline //用一行來顯示操做歷史記錄 git reset --hard head^ //回退到上一個版本 git reset --hard 版本號 //回退到指定版本 回退的關鍵是要找到版本號,若是一不當心關掉了電腦,經過git log命令沒法打印出以前的操做記錄,可是能夠經過 git reflog //顯示出操做記錄,從中找到版本號,而後再回退。 若是回退到了以前較舊的版本,又想回到較新的版本,也仍然能夠用git reset --hard 版本號 實現, 全部版本穿梭的關鍵就是準備定位版本號。
工做區就是電腦裏能看到的目錄,工做區裏有一個隱藏文件夾.git,這是git的版本庫。
Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEAD。git
咱們把文件往Git版本庫裏添加的時候,是分兩步執行的:緩存
第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區(stage);spa
第二步是用git commit提交更改,實際上就是把暫存區的全部內容提交到當前分支。
當add完之後,再經過git commit 一次性將全部修改提交到分支。這時再git status就會顯示nothing to commit (working directory clean) 工做區乾淨。指針
核心:全部的修改在commit以前,必定要add,否則就不會提交到分支上code
第一次修改 -> 第二次修改 ->git add -> git commit 第一次修改 -> git add -> 第二次修改 -> git add -> git commit //這兩種方式,最終獲得的效果是同樣的
一般來講,在git commit之前通常都要git,add,不然咱們想要commit的內容實際上並無被commit上去,可是git提供了一個省略git add的辦法,那就是git commit -a -m '描述本次commit的內容' ,能夠忽略add 直接commit ,-m 參數通常在任何狀況下都不省略,由於提交描述是咱們和他人合做的關鍵blog
git checkout -- filename
命令git checkout -- readme.txt意思就是,把readme.txt文件在工做區的修改所有撤銷,這裏有兩種狀況:圖片
一種是readme.txt自修改後尚未被放到暫存區,如今,撤銷修改就回到和版本庫如出一轍的狀態;ip
一種是readme.txt已經添加到暫存區後,又做了修改,如今,撤銷修改就回到添加到暫存區後的狀態。it
總之,就是讓這個文件回到最近一次git commit或git add時的狀態。ast
場景1:當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout -- file。
場景2:當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操做。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。
若是你刪除了一個文件1.txt $ git status //git知道文件已經被你刪除了,並會提示你,提供瞭如下兩種選擇 $ git checkout -- 1.txt //若是你是誤刪,經過這條指令能夠將文件恢復到工做區 $ rm 1.txt //若是你肯定要刪除,經過這條指令能夠將文件從git版本庫中刪除
git checkout實際上是用版本庫裏的版本替換工做區的版本,不管工做區是修改仍是刪除,均可以「一鍵還原」。
命令git rm用於刪除一個文件。若是一個文件已經被提交到版本庫,那麼你永遠不用擔憂誤刪,可是要當心,你只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容。