Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEAD。
工做區有一個隱藏目錄.git,這個不算工做區,而是Git的版本庫前端
#建立文件 $ mkdir myapp #進入文件 $ cd myapp #初始化代碼倉庫 $ git init #把須要提交的全部修改放到暫存區(Stage) $ git add file #提交全部文件 #$ git add . #提交全部.js格式文件 #$ git add *.js #強制添加 #$ git add -f file #提交代碼 $ git commit -m "commit info"
#查看歷史記錄,git log命令顯示從最近到最遠的提交日誌 $ git log #查看分支合併圖 $ git log --graph #Git提供了一個命令git reflog用來記錄你的每一次命令: $ git reflog #git status命令用於顯示工做目錄和暫存區的狀態。使用此命令能看到那些修改被暫存到了, 哪些沒有, 哪些文件沒有被Git tracked到。git status不顯示已經commit到項目歷史中去的信息。 $ git status #當暫存區中沒有文件時,git diff比較的是,工做區中的文件與上次提交到版本庫中的文件。 #當暫存區中有文件時,git diff則比較的是,當前工做區中的文件與暫存區中的文 $ git diff #比較工做區中的文件與版本庫中文件的差別。HEAD指向的是版本庫中的當前版本,而file指的是當前工做區中的文件。 $ git diff HEAD -- file
#Git必須知道當前版本是哪一個版本,在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當回退版本較早時能夠寫成HEAD~100。 #版本回退 $ git reset --hard HEAD^ #取消回退,commitId爲你想要回到的將來版本號 $ git reset --hard commitId
命令git checkout ——file 把文件在工做區的修改所有撤銷,這裏有兩種狀況:git
* 一種是file修改後尚未被放到暫存區,如今,撤銷修改就回到和版本庫如出一轍的狀態; * 一種是file已經添加到暫存區後,又做了修改,如今,撤銷修改就回到添加到暫存區後的狀態。
#文件在工做區的修改所有撤銷 $ git checkout --file
命令git rm用於從版本庫刪除一個文件。
若是一個文件已經被提交到版本庫,那麼你永遠不用擔憂誤刪,可是要當心,你只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容。github
#從版本庫刪除一個文件 $ git rm file
提示:先手動刪除文件,而後使用git rm <file>和git add<file>效果是同樣的。
#關聯一個遠程庫 $ git remote add origin <address> #第一次將本地庫的全部內容推送到遠程庫上 $ git push -u origin master [-f] #此後,每次本地提交後,就可使用命令推送最新修改 $ git push origin master
# git clone [url]
好比,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,能夠用下面的命令:面試
#這會在當前目錄下建立一個名爲grit的目錄,其中包含一個.git的目錄,用於保存下載下來的全部版本記錄,而後從中取出最新版本的文件拷貝。若是進入這個新建的grit目錄,你會看到項目中的全部文件已經在裏邊了,準備好後續的開發和使用。 $ git clone git://github.com/schacon/grit.git
若是但願在克隆的時候,本身定義要新建的項目目錄名稱,能夠在上面的命令末尾指定新的名字:segmentfault
#惟一的差異就是,如今新建的目錄成了mygrit,其餘的都和上邊的同樣。 $ git clone git://github.com/schacon/grit.git mygrit
建立+切換分支:app
$ git checkout -b <name>
建立分支:url
$ git branch <name>
切換分支spa
$ git checkout <name>
查看分支:指針
#git branch命令會列出全部分支,當前分支前面會標一個*號。 $ git branch
切換分支日誌
#切換回master分支 $ git checkout <name>
合併某分支到當前分支
$ git merge <name>
刪除分支
$ git branch -d <name>
Git分支十分強大,在團隊開發中應該充分應用。
合併分支時,加上—no-ff參數就能夠用普通模式合併,合併後的歷史有分支,能看出來曾經作過合併,而fast forward合併就看不出來曾經作過合併。
儲藏能夠獲取你工做目錄的中間狀態——也就是你修改過的被追蹤的文件和暫存的變動——並將它保存到一個未完結變動的堆棧中,隨時能夠從新應用。
如今你想切換分支,可是你還不想提交你正在進行中的工做;因此你儲藏這些變動。爲了往堆棧推送一個新的儲藏,只要運行git stash。把全部未提交的修改(包括暫存的和非暫存的)都保存起來,用於後續恢復當前工做目錄。
git stash
須要說明一點,stash是本地的,不會經過git push命令上傳到git server上。
查看現有的全部儲藏,此命令顯然暗示了git stash能夠屢次保存工做進度,並用在恢復時候選擇。
$ git stash list
從新應用已經實施的儲藏(不刪除儲藏)
#若是你想應用更早的儲藏,你能夠經過名字指定它,像這樣:git stash apply stash@{2}。若是你不指明,Git 默認使用最近的儲藏並嘗試應用它 $ git stash apply [--index] [<stash>]
從新應用已經實施的儲藏(刪除儲藏)
#若是不使用任何參數,會恢復最新保存的工做進度,並將恢復的工做進度從存儲的工做進度列表中清除。 #若是提供<stash>參數(來自git stash list顯示的列表),則從該<stash>中恢復。恢復完畢也將從進度列表中刪除<stash>。 #選項--index除了恢復工做區的文件外,還嘗試恢復暫存區。 $ git stash pop [--index] [<stash>]
刪除一個存儲的進度。(默認刪除最新的進度)
$ git stash drop [<stash>]
清空當前全部的stash
$ git stash clear
基於儲藏進度建立分支。
$ git stash branch <branchname> <stash>
查看遠程庫的信息:
#或者用git remote -v 可顯示更詳細的信息 $ git remote
推送分支,該分支上的全部本地提交推送到遠程庫
$ git push origin <branch-name>
從本地推送分支,若是推送失敗,先抓取遠程的新提交:
$ git pull
推薦閱讀:
2019年前端面試題-01
2019年前端面試題-02
2019年前端面試題-03
2019年前端筆試題
我是Cloudy,年輕的前端攻城獅一枚,愛專研,愛技術,愛分享。
我的筆記,整理不易,感謝閱讀、點贊和收藏。
文章有任何問題歡迎你們指出,也歡迎你們一塊兒交流前端各類問題!