一询筏、GIT的安裝
#Ubuntu的安裝;
sudo apt-get install git
#老一些的版本的Ubuntu可能用的安裝命令
sudo apt-get install git-core
#windows下的安裝负蚊;
#下載地址:https://git-scm.com/downloads
#安裝完以后,在開始菜單下會(huì)有一個(gè)git bash的圖標(biāo);
二实辑、配置GIT
#安裝完成后漱病,還需要配置一下用戶信息买雾;
$git config --global user.name 'overad'
$git config --global user.email 'overad@163.com'
#注意config 的--global參數(shù),用了這個(gè)參數(shù)杨帽,表示這臺(tái)機(jī)器上的所有的GIT倉(cāng)庫(kù)都會(huì)使用這個(gè)配置漓穿,當(dāng)然也可以對(duì)某個(gè)倉(cāng)庫(kù)指定不同的用戶名和Email地址;
三注盈、創(chuàng)建GIT版本
$mkdir git
$cd git
#可以通過pwd查看文件的位置晃危;
#通過git init 命令吧這個(gè)目錄變成GIT可以管理的倉(cāng)庫(kù)
$git init
四、管理文件:
#通過git add告訴GIT老客,把文件添加到倉(cāng)庫(kù)
$git add readme.txt
#git add可以一次提交很多文件僚饭,在同一提交后,用git commit命令說明備注胧砰;
#使用git commit告訴git鳍鸵,吧文件提交到倉(cāng)庫(kù)git commit -m "wrote a readme file"
#git commit命令,-m后面輸入的是本次提交的說明尉间;可以輸入任何內(nèi)容偿乖,說明改動(dòng)記錄
#git status命令可以讓我們時(shí)刻掌握倉(cāng)庫(kù)的當(dāng)前狀態(tài)击罪;
#可以使用git diff查看difference,顯示的格式是Unix通用的diff格式汹想;
git diff readme.txt ?
#查看改動(dòng)記錄(日志)
git log
#所有的記錄顯示在一起外邓;
git log --pretty=oneline
五、回滾
#使用git reset回滾古掏,
#其中HEAD表示當(dāng)前版本损话;HEAD^表示上一個(gè)版本;HEAD^^表示上上個(gè)版本槽唾;
#回滾
$git reset --hard HEAD^
#查看文本文件里面的詳細(xì)內(nèi)容丧枪;
$cat learngit.txt
#版本回滾后,要繼續(xù)恢復(fù)怎么辦庞萍;如果命令行的窗口還沒有關(guān)閉的話拧烦,可以往上找,找到他的commit id钝计;
$git reset --hard?fe7ced362e9
#commit id 沒必要寫完整恋博,git會(huì)自動(dòng)去找;但是不能太短私恬,以免不能唯一識(shí)別债沮;
#如果關(guān)閉了電腦或者關(guān)閉了命令行的窗口的話,就不能直接找到指定的commit id本鸣;
$git reflog
總結(jié):
git有暫緩區(qū)和工作區(qū)兩個(gè)概念:當(dāng)我們?cè)趃it add提交文件的時(shí)候疫衩,我們的文件提交到的是暫緩區(qū);等我們?cè)趃it commit提交的時(shí)候荣德,才一次性提交到工作區(qū)(分支)
六闷煤、撤銷修改:
#git系統(tǒng)是記錄修改,每次修改完以后通過git add命令添加到緩存區(qū)涮瞻;針對(duì)已添加到緩存區(qū)的修改需要撤回鲤拿;
$git checkout --learngit.txt
#此命令就是退回到上次的git commit的狀態(tài);
#git check --file 的--很重要署咽,如果沒有“--”就變成了“切換到另一個(gè)分支”的命令近顷;
#當(dāng)提交到了緩存區(qū),我們需要撤回艇抠;
$git reset HEAD learngit.txt
#git reset 命令既可以回退版本幕庐,也可以吧暫存區(qū)回退到工作區(qū);當(dāng)我們用HEAD時(shí)家淤,表示最新的版本异剥;
總結(jié):
當(dāng)你改亂了工作區(qū)的某個(gè)文件的內(nèi)容,想直接丟棄工作區(qū)的修改的時(shí)候絮重,用命令 get checkout --file
當(dāng)你不但改亂了工作區(qū)的某個(gè)文件的內(nèi)容冤寿,還添加到了暫存區(qū)時(shí)歹苦,想丟棄修改,分兩步督怜,第一步用命令git reset Head file殴瘦,就回到了上面的場(chǎng)景,第二部按照上面操作号杠;
當(dāng)已經(jīng)提交了不合適的修改版本到版本庫(kù)時(shí)蚪腋;想要撤銷本次提交,參考版本回退姨蟋;不過前提是沒有推送到遠(yuǎn)程庫(kù)
七屉凯、遠(yuǎn)程連接
#Windows系統(tǒng)下一一般都是需要自己創(chuàng)建SSH KEY的;郵件處填寫你前面創(chuàng)建git的時(shí)候的郵件名眼溶;區(qū)分用戶悠砚;
$ssh-keygen -t rsa -C "overad@163.com"
#一路next(enter)
#添加成功后,在.shh的文件下面會(huì)生成兩個(gè)文件堂飞;id_rsa 和 id_rsa.pub灌旧;其中id_rsa是私鑰,不能泄露出去绰筛,id_rsa.pub是公鑰枢泰,可 #登錄GitHub可以通過添加ssh(復(fù)制id_rsa.pub中的內(nèi)容到github中)
#一切準(zhǔn)備就緒以后;我們根據(jù)GitHub的提示别智,在本地的git倉(cāng)庫(kù)下運(yùn)行命令git remote add overgit git@github.com:overad/spides.git
#其中:overgit是遠(yuǎn)程庫(kù)的名稱宗苍,可以存在很多個(gè)稼稿;
#overad是GitHub的用戶名薄榛;
#spides是項(xiàng)目名稱;(如果沒有的話让歼,需要提前創(chuàng)建)
#把本地庫(kù)的內(nèi)容推送到遠(yuǎn)程庫(kù)上敞恋;(第一添加u,以后可以不添加,添加U參數(shù)谋右,git不僅會(huì)把本地的master分支內(nèi)容推送到遠(yuǎn)程新的master分支硬猫,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉去時(shí)就可以簡(jiǎn)化命令)
git push -u overgit master
#以后的提交git push overgit master
從遠(yuǎn)程克赂闹础啸蜜;
#我們先在GitHub的下創(chuàng)建好了遠(yuǎn)程庫(kù)(勾選Initialize this respository with a README)
#從遠(yuǎn)程克隆一個(gè)本地庫(kù)git clone git@github.com:overad/spides.git
八、分支
#首先辈挂,創(chuàng)建dev分支衬横,然后切換到dec分支
git checkout -b dev
#git checkout命令加上 -b 參數(shù)表示創(chuàng)建并切換,相當(dāng)于以下兩條命令终蒂;
git branch dev?
git checkout dev?
#然后用git branch命令查看當(dāng)前分支蜂林;
git branch
#git branch命令會(huì)列出所有分支遥诉,當(dāng)前分支前會(huì)有一個(gè)*號(hào);#然后我們就可以在dev分支上正常提交噪叙,比如對(duì)readme.txt做個(gè)修改矮锈;
creating a new branch is quick
#然后提交;
git add readme.txtgit commit -m 'branch test'
#現(xiàn)在dev的分支工作完成睁蕾,我們就可以切換回master分支苞笨;
git checkout master
#現(xiàn)在,我們把dev分支的工作成果合并到master分支上:
git merge dev
#git merge命令用于合并指定分支到當(dāng)前分支子眶,合并后猫缭,在查看readme.txt的內(nèi)容。
#注意到Fast-Forward信息壹店,GIT告訴我們猜丹,這次合并是“快速模式”,也就是直接把master指向dev的當(dāng)前提交硅卢;
#合并完成后就可以放心的刪除dev分支了射窒;
git branch -d dev
#刪除后,查看branch将塑,就只剩下master分支了脉顿;git branch
總結(jié):
#GIT鼓勵(lì)大量使用分支;
#查看分支:git branch
#創(chuàng)建分支:git branch
#切換分支:git checkout
#創(chuàng)建+切換分支:git checkout -b
#合并某分支到當(dāng)前分支:git merge
#刪除分支:git branch -d
九点寥、創(chuàng)建標(biāo)簽艾疟;
#在GIT中打標(biāo)簽非常簡(jiǎn)單,首先切換到需要打標(biāo)簽的分支上敢辩;
git branchgit checkout master
#然后敲命令git tag 就可以打一個(gè)新標(biāo)簽
git tag v1.0
#可以用命令git tag 查看所有標(biāo)簽蔽莱;
git tag
#默認(rèn)標(biāo)簽是打在最新提交的commit上的,有時(shí)候戚长,如果忘記打標(biāo)簽盗冷,可以找到歷史提交的commit id 然后大打上就可以
git log --pretty=oneline --abbrev-commit
#比方說要對(duì)add merge這次提交打標(biāo)簽;他對(duì)應(yīng)的commit id 是6223454同廉,仪糖;
git tag v0.9 6223454
#再用命令git tag查看標(biāo)簽;
git tag
#注意迫肖,標(biāo)簽不是按時(shí)間順序列出锅劝,而是按照字母排序的,可以用git show 查看標(biāo)簽信息git show v0.9
#還可以創(chuàng)建自帶說明的標(biāo)簽蟆湖,用-a指定標(biāo)簽名故爵,-m指定說明文字;
git tag -v0.1 -m "version 0.1 released"?6223454
#用命令git show 可以看到說明文字帐姻;
git show v0.1
#可以通過-s用私鑰簽名一個(gè)標(biāo)簽稠集;
git tag -s v0.2 -m "signed version 0.2 released" fec145a
#簽名采用PGP簽名奶段,因此,必須首先安裝gpg剥纷。如果沒找到gpg或者沒有g(shù)pg密鑰對(duì)痹籍,就會(huì)報(bào)錯(cuò);
操作標(biāo)簽晦鞋;
#如果標(biāo)簽打錯(cuò)了的話蹲缠,可以刪除;
git tag -d v0.1
#創(chuàng)建的標(biāo)簽都是儲(chǔ)存在本地悠垛,如果要推送到遠(yuǎn)程的話线定,需要使用
git push overgit git push overgit v1.0
#或者一次性推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽
git push overgit --tags
#但是如果標(biāo)簽已經(jīng)推送到了遠(yuǎn)程,要?jiǎng)h除遠(yuǎn)程的標(biāo)簽就麻煩一點(diǎn)确买,先充本地刪除斤讥;
git tag -d v0.9
#再?zèng)_遠(yuǎn)程刪除,刪除的命令也是push湾趾,格式:
git push overgit :refs/tags/v0.9
總結(jié):
git push overgit ? ? #可以推送一個(gè)本地標(biāo)簽芭商;
git push overgit --tags?? ?? ? #可以推送全部未推送過得本地標(biāo)簽;
git tag -d ?? ??? ?? ?#可以刪除一個(gè)本地標(biāo)簽
git push overgit :refs/tags/? ? #可以刪除一個(gè)遠(yuǎn)程標(biāo)簽搀缠;