1、Git是目前世界上最先進的分布式版本控制系統(tǒng)。和集中式版本控制系統(tǒng)相比,分布式版本控制系統(tǒng)的安全性要高很多,因為每個人電腦里都有完整的版本庫,某一個人的電腦壞掉了不要緊,隨便從其他人那里復制一個就可以了。而集中式版本控制系統(tǒng)的中央服務器要是出了問題,所有人都沒法干活了。
安裝好Git后在Git CMD命令行輸入如下配置身份:
$?git?config?--global?user.name?"Your?Name" $?git?config?--global?user.email?"email@example.com"
配置完成后可以使用同樣的命令去掉名字和郵箱查看是否配置成功。
2、創(chuàng)建版本庫
在Git CMD命令行下切換到工作目錄(F:切換到F盤,跟dos一樣)
使用mkdir創(chuàng)建文件夾,cd 進入到learngit文件夾,pwd查看當前工作文件夾。
$?mkdir?learngit $?cd?learngit $?pwd /Users/michael/learngit
$?git?init
建倉庫。目前是一個空的倉庫(empty Git repository),細心的讀者可以發(fā)現(xiàn)當前目錄下多了一個.git
的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄里面的文件,不然改亂了,就把Git倉庫給破壞了。
3、
touch?readme.txt
git?add?readme.txt
將readme.txt從工作區(qū)添加到版本庫暫存區(qū)。
git?status
查看當前狀態(tài)。使用最頻繁,在修改工作區(qū)內(nèi)容后可以使用它查看。
git?commit?-m?"add?readme.txt"
提交readme.txt,-m添加對其的描述說明。
cat?readme.txt
查看文本內(nèi)容。
git?log
查看歷史記錄。
git?reflog
主要用于查看之前版本號
git?reset?--hard?c1dc335
回退到之前的版本,也可以用此命令再恢復到后面的版本。
4、撤銷修改
修改了還沒add可以使用命令撤銷這個修改
git?checkout?--?readme.txt
add了還沒commit可以用命令將暫存區(qū)的修改撤銷。再使用上一個命令就可以將文本文件修改的內(nèi)容撤銷
git?reset?HEAD?readme.txt
5、刪除與恢復
刪除已經(jīng)提交的文件。
rm?readme.txt
發(fā)現(xiàn)刪除錯誤,還可以用命令恢復,此時文本還在暫存區(qū),可以恢復。
git?checkout?--?readme.txt
6、Git與GitHub
這個網(wǎng)站就是提供Git倉庫托管服務的,只要注冊一個GitHub賬號,就可以免費獲得Git遠程倉庫。
由于本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以,需要一點設置:
第1步:創(chuàng)建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa
和id_rsa.pub
這兩個文件,如果已經(jīng)有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git
Bash),創(chuàng)建SSH Key:
ssh-keygen?-t?rsa?-C?"youremail@example.com"
把郵箱地址換成自己的地址一路回車??梢栽谟脩糁髂夸浝镎业?code style="font-family:Consolas, monospace, serif;border:1px solid rgb(221,221,221);line-height:20px;">.ssh目錄,里面有id_rsa
和id_rsa.pub
兩個文件,這兩個就是SSH
Key的秘鑰對,id_rsa
是私鑰,不能泄露出去,id_rsa.pub
是公鑰。
第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面:
然后,點“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub
文件的內(nèi)容:
首先,登陸GitHub,然后,在右上角找到“Create a new repo”按鈕,創(chuàng)建一個新的倉庫:
在Repository name填入learngit
,其他保持默認設置,點擊“Create repository”按鈕,就成功地創(chuàng)建了一個新的Git倉庫:
目前,在GitHub上的這個learngit
倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關(guān)聯(lián),然后,把本地倉庫的內(nèi)容推送到GitHub倉庫。
現(xiàn)在,我們根據(jù)GitHub的提示,在本地的learngit
倉庫下運行命令:
$?git?remote?add?origin?git@github.com:michaelliao/learngit.git
注意,把上面的michaelliao
替換成自己的GitHub賬戶名。
添加后,遠程庫的名字就是origin
,這是Git默認的叫法,也可以改成別的,但是origin
這個名字一看就知道是遠程庫。
下一步,就可以把本地庫的所有內(nèi)容推送到遠程庫上:
$?git?push?-u?origin?master Counting?objects:?19,?done. Delta?compression?using?up?to?4?threads. Compressing?objects:?100%?(19/19),?done. Writing?objects:?100%?(19/19),?13.73?KiB,?done. Total?23?(delta?6),?reused?0?(delta?0) To?git@github.com:michaelliao/learngit.git ?*?[new?branch]??????master?->?master Branch?master?set?up?to?track?remote?branch?master?from?origin.
把本地庫的內(nèi)容推送到遠程,用git push
命令,實際上是把當前分支master
推送到遠程。
由于遠程庫是空的,我們第一次推送master
分支時,加上了-u
參數(shù),Git不但會把本地的master
分支內(nèi)容推送的遠程新的master
分支,還會把本地的master
分支和遠程的master
分支關(guān)聯(lián)起來,在以后的推送或者拉取時就可以簡化命令。
推送成功后,可以立刻在GitHub頁面中看到遠程庫的內(nèi)容已經(jīng)和本地一模一樣:
從現(xiàn)在起,只要本地作了提交,就可以通過命令:
$?git?push?origin?master
把本地master
分支的最新修改推送至GitHub,現(xiàn)在,你就擁有了真正的分布式版本庫!
SSH警告
當你第一次使用Git的clone
或者push
命令連接GitHub時,會得到一個警告:
The?authenticity?of?host?'github.com?(xx.xx.xx.xx)'?can't?be?established. RSA?key?fingerprint?is?xx.xx.xx.xx.xx. Are?you?sure?you?want?to?continue?connecting?(yes/no)?
這是因為Git使用SSH連接,而SSH連接在第一次驗證GitHub服務器的Key時,需要你確認GitHub的Key的指紋信息是否真的來自GitHub的服務器,輸入yes
回車即可。
Git會輸出一個警告,告訴你已經(jīng)把GitHub的Key添加到本機的一個信任列表里了:
Warning:?Permanently?added?'github.com'?(RSA)?to?the?list?of?known?hosts.
這個警告只會出現(xiàn)一次,后面的操作就不會有任何警告了。
6、將遠程庫GitHub上的庫克隆到本地庫(自己電腦上)
上面講了先有本地庫,后有遠程庫的時候,如何關(guān)聯(lián)遠程庫。
現(xiàn)在,假設我們從零開發(fā),那么最好的方式是先創(chuàng)建遠程庫,然后,從遠程庫克隆。
首先,登陸GitHub,創(chuàng)建一個新的倉庫,名字叫gitshills
:
我們勾選Initialize this repository with a README
,這樣GitHub會自動為我們創(chuàng)建一個README.md
文件。創(chuàng)建完畢后,可以看到README.md
文件:
現(xiàn)在,遠程庫已經(jīng)準備好了,下一步是用命令git clone
克隆一個本地庫:
$?git?clone?git@github.com:michaelliao/gitskills.git Cloning?into?'gitskills'... remote:?Counting?objects:?3,?done. remote:?Total?3?(delta?0),?reused?0?(delta?0) Receiving?objects:?100%?(3/3),?done. $?cd?gitskills $?ls README.md
然后進入gitshills
目錄看看,已經(jīng)有README.md
文件了。