Git是世界上目前最先進的分布式版本控制系統。
工作原理圖:
Workspace工作區,Index暫存區,Repository本地倉庫區,Remote遠程倉庫。
SVN與Git的最主要的區別?
SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而干活的時候,用的都是自己的電腦,所以首先要從中央服務器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作,如果在局域網還可以,帶寬夠大,速度夠快,如果在互聯網下,如果網速慢的話,就納悶了。
Git是分布式版本控制系統,那么它就沒有中央服務器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因為版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。
Git基本指令:
1.創建版本庫
(1)找路徑:找到你想創建版本庫的文件夾下;右鍵出現Git.bash here(前提是安裝好了Git)
或者cd f:-> cd 文件夾名字
(2)把當前目錄升級成git的管理倉庫:指令 git init 之后會在當前文件夾下出現名 .git 隱藏文件夾。
(3)git status指令 查看當前文件夾下有沒有文件/文件夾未提交的:
上半部分的紅色字體modified:....為已經添加到版本庫的,修改后未提交的文件。(在這說一下,不是一創建版本庫 git init 就把當前文件夾下所有文件放進庫里的,而是需要手動添加。)
下半部分紅色Untracken files:......就是當前文件夾沒有添加到版本控制庫里的文件;
(4)git add test.txt 指令,就是把文件或者文件夾添加到版本控制庫里。
我們可以創建一個testgit文本文件試驗一下,文本內容為111111;
(5)git commit 指令通知git,已經把文件提交到倉庫了。
再用git status查看當前狀態 ,可以看到沒有testgit文件,因為我們已經add了testgit並且commit提交了。而另外兩個文件依然為modified,因為我們一直沒有add他們兩個,所以就像放着把。
然后我們嘗試修改testgit.txt文件,添加一行222222,再git status查詢一下
發先現estgit成了modified:,因為我們修改了還沒提交。
(6)git diff testgit.txt 指令查看文件遇上一個提交版本又哪里不同。
可以看到出現了紅色和綠色兩個部分,紅色為之前已提交的內容,綠色為當前修改后 未提交的內容。 之后我們就可以繼續更新版本庫了(git add + git commit)
(7)版本回退git reset -- hard HEAD^:當前testgit.txt已經更改兩次,我們可以用 git log 指令查看每次提交的內容(也就是commit的日志)
ps:git log是一個功能很強大的指令,這里使用的是git log -- 文件名,限定顯示此文件的提交日志,如果不對git log指令做任何修飾,那么他將會顯示所有的日志信息。讓你的版本庫修改過很多次有很多文件時,那么多信息簡直爆炸。(推薦看一下這個指令的全解析)
git log顯示的順序時從近到遠,我們要回退到上個版本的話就要使用 git reset -- hard HEAD^ 。(如果要回退前N個版本就可以用指令git reset --hard HEAD~N)
會退后,通過命令cat readme.txt查看當前內容發現真的變回去了。
***我們也可以根據版本號來回退, git reflog -- testgit.txt(與git log差不多的用法)
34946b4就是版本號,然后就可以用指令git reset --hard 版本號
(8)撤銷修改指令 git checkout -- 文件名
應用情景:再未提交前,想要恢復到以前的版本。
方法一:手動修改然后add+commit;方法二:回到上一個版本git reset --hard HEAD^
方法三:git checkout -- testgit.txt (意思是把testgit.txt文件在工作區做的修改全部撤銷,回到add時的狀態。)
(9)刪除文件指令 rm testgit.txt
刪除也可以手動右鍵刪除,刪除后有兩個選擇:1.commit提交狀態,徹底刪除;2.從版本庫中恢復文件,也是用git checkout -- testgit.txt 指令
待完善。。