名詞解釋
1.工作區(qū)(Working Directory) : 就是你在電腦里能看到的目錄,比如我的GitHub文件夾目錄
2.版本庫(Repository): 在工作區(qū)有一個隱藏目錄.git,這個就是Git的版本庫
3.暫存區(qū): 在版本庫中存在一個成為Stage的暫存區(qū),它是專門存儲修改和添加的區(qū)域法竞。一旦提交后,如果你又沒有對工作區(qū)做任何修改,那么暫存區(qū)就是干凈的
管理修改(需要案例證明)
為什么Git比其他版本控制系統(tǒng)設計得優(yōu)秀印蔗,因為Git跟蹤并管理的是修改而线,而非文件应闯。你會問堪夭,什么是修改?比如你新增了一行毕莱,這就是一個修改蔑鹦,刪除了一行,也是一個修改弟晚,更改了某些字符忘衍,也是一個修改逾苫,刪了一些又加了一些,也是一個修改枚钓,甚至創(chuàng)建一個新文件铅搓,也算一個修改。
Git不會提交沒有放到暫存區(qū)的修改
這里我畫了一個圖方便大家理解秘噪;
git流程.png
bg2015120901.png
Workspace:工作區(qū)
Index / Stage:暫存區(qū)
Repository:倉庫區(qū)(或本地倉庫)
Remote:遠程倉庫
git_three_rigon.png
工作區(qū)(working diretory) 用于修改文件
緩存區(qū)(stage) 是用來暫時存放工作區(qū)中修改的內(nèi)容
提交歷史(commit history) 提交代碼的歷史記錄
1.安裝:GitLens
2.快捷鍵打開終端:ctrl+`
3.cd 項目文件下狸吞;如cd gitlab/learngit
4.命令行:創(chuàng)建版本庫,版本提交指煎,版本回退蹋偏,管理修改,撤銷修改至壤,刪除文件
0威始、創(chuàng)建版本庫(選擇一個合適的地方,創(chuàng)建一個空目錄gitlab/learngit。進入gitlab/learngit文件夾中)
$ cd gitlab/learngit
$ git init // 通過git init命令把這個目錄變成Git可以管理的倉庫
或者直接拉取克隆版本庫項目
$ git clone 鏈接像街,類似git@github.com:yourname/test.git的
1黎棠、版本提交
git add <file>文件名或文件夾名稱或者.代表所有
git commit -m "這次的提交描述備注"
git status 查看提交修改的文件
git branch 查看當前分支
git branch <分支名字>創(chuàng)建分支
git checkout <分支名字>切換分支
git merge <分支名字>(不是當前的分支)合并某分支到當前分支
git branch -d <分支名字>刪除分支
$ git push origin master 上傳本地指定分支到遠程倉庫
$ git pull [branch] 取回遠程倉庫的變化,并與本地分支合并
2镰绎、版本回退
回退到上一個版本(可以多次使用)
$ git reset --hard HEAD^
回退到上兩個版本
$ git reset --hard HEAD^^
git log查看提交歷史脓斩,然后git reset 回退到指定版本 。這也是每次commit -m" "中寫內(nèi)容的重要性畴栖,說不定什么時候就拯救了你寫了好幾天的代碼随静。hard后面跟的版本號沒必要全部寫出來,git會自動去補全匹配吗讶。
$ git log
$ git reset --hard
3燎猛、管理修改
我們來一個操作,第一次修改 -> git add -> 第二次修改 -> git commit
然后git status查看狀態(tài)照皆,咦重绷,怎么第二次的修改沒有被提交?
Git管理的是修改膜毁,當你用git add命令后昭卓,在工作區(qū)的第一次修改被放入暫存區(qū),準備提交瘟滨,但是葬凳,在工作區(qū)的第二次修改并沒有放入暫存區(qū),所以室奏,git commit只負責把暫存區(qū)的修改提交了火焰,也就是第一次的修改被提交了,第二次的修改不會被提交胧沫。
提交后昌简,用git diff HEAD -- readme.txt命令可以查看工作區(qū)和版本庫里面最新版本的區(qū)別占业。
那怎么提交第二次修改呢?你可以繼續(xù)git add再git commit纯赎,也可以別著急提交第一次修改谦疾,先git add第二次修改,再git commit犬金,就相當于把兩次修改合并后一塊提交了:
第一次修改 -> git add -> 第二次修改 -> git add -> git commit
4念恍、撤銷修改
$ git checkout -- readme.txt
令git checkout -- readme.txt意思就是,把readme.txt文件在工作區(qū)的修改全部撤銷晚顷,這里有兩種情況:
一種是readme.txt自修改后還沒有被放到暫存區(qū)峰伙,現(xiàn)在,撤銷修改就回到和版本庫一模一樣的狀態(tài)该默;
一種是readme.txt已經(jīng)添加到暫存區(qū)后瞳氓,又作了修改,現(xiàn)在栓袖,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)匣摘。
總之,就是讓這個文件回到最近一次git commit或git add時的狀態(tài)裹刮。
git checkout -- file命令中的--很重要音榜,沒有--,就變成了“切換到另一個分支”的命令捧弃。
5囊咏、刪除文件
$ git rm test.txt
$ git commit -m "remove test.txt"
**bug分支**
情景:undong.txt 工作還沒做完(暫存區(qū)有很多add文件,這時還沒有commit)塔橡,這時接收到一個必須在兩小時內(nèi)完成的bug文件(和之前的工作無關(guān))
1 這時就要保存工作現(xiàn)場 git stash
2 添加新分支 git branch fixbug
3 切換到這個分支 git checkout fixbug
4 git add bug文件
5 提交 git commit
6 刪除該分支(一般情況應該合并)
查看分支現(xiàn)場 git
7 修復之前的分支 git stash pop