Git 是一個免費的開源分佈式版本控制系統,它的設計目的是爲了速度和效率的處理從小型到大型的項目;Git 能夠幫咱們管理咱們的代碼,記錄歷史,只要代碼提交到 Git 上就永久不會丟失,能夠隨時 「穿越」(回到以前的某一個版本);能夠多端共享,團隊協做中,多我的操做了同一個文件時,能夠實現自動合併(模塊化,組件化)、標記衝突,擁有強大的分支管理系統。git
SVN:集中式,須要一臺中央服務器,全部代碼的拉取和提交都是在中央服務器,一旦中央服務器或者網絡出現故障,則不能拉取和提交代碼,須要不斷去備份中央服務器,防止代碼丟失。緩存
Git:分佈式,有一箇中央服務器的同時,每一個開發者本地都有本身的本地倉庫,擁有完整的版本庫,不用擔憂代碼丟失,Git 存儲的是代碼變化的快照,更新代碼的速度要比 SVN 更快。服務器
stage
, 或index。通常存放在 ".git
目錄下" 下的index
文件(.git/index)
中,因此咱們把暫存區有時也叫做索引(index)
。.git
,這個不算工做區,而是Git的版本庫。下面這個圖展現了工做區、版本庫中的暫存區和版本庫之間的關係:網絡
圖中左側爲工做區,右側爲版本庫。在版本庫中標記爲 "index"
的區域是暫存區(stage, index)
,標記爲 "master"
的是 master
分支所表明的目錄樹。app
圖中咱們能夠看出此時 "HEAD"
實際是指向 master
分支的一個"遊標"。因此圖示的命令中出現 HEAD
的地方能夠用 master
來替換。分佈式
圖中的 objects
標識的區域爲 Git 的對象庫,實際位於 ".git/objects"
目錄下,裏面包含了建立的各類對象及內容。模塊化
當對工做區修改(或新增)的文件執行 "git add"
命令時,暫存區的目錄樹被更新,同時工做區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中。組件化
當執行提交操做(git commit)
時,暫存區的目錄樹寫到版本庫(對象庫)中,master
分支會作相應的更新。即 master
指向的目錄樹就是提交時暫存區的目錄樹。學習
當執行 "git reset HEAD"
命令時,暫存區的目錄樹會被重寫,被 master
分支指向的目錄樹所替換,可是工做區不受影響。fetch
當執行 "git rm --cached <file>"
命令時,會直接從暫存區刪除文件,工做區則不作出改變。
當執行 "git checkout ."
或者 "git checkout -- <file>"
命令時,會用暫存區所有或指定的文件替換工做區的文件。這個操做很危險,會清除工做區中未添加到暫存區的改動。
當執行 "git checkout HEAD ."
或者 "git checkout HEAD <file>"
命令時,會用 HEAD
指向的 master
分支中的所有或者部分文件替換暫存區和以及工做區中的文件。這個命令也是極具危險性的,由於不但會清除工做區中未提交的改動,也會清除暫存區中未提交的改動。
提交
git add .
git add <file1> <file2> ...;
git add [dir];
撤消
git rm <file1> <file2>;
git rm --cached <file>;
git reset HEAD <file>...;
git checkout --<file>。
要肯定上一次對文件的修改再也不須要,若是 stashing
和分支來處理;git stash;
git stash list;
git stash apply
,若是想應用更早的儲藏:git stash apply stash@{2}
--index
參數:git stash apply --index;
apply
命令只是應用儲藏,而內容仍然還在棧上,須要移除指定的儲藏:git stash drop stash{0};
若是使用pop命令不只能夠從新應用儲藏,還能夠馬上從堆棧中清除:git stash pop;
撤銷修改
a. 撤銷工做區的修改,不影響緩存區
$ git checkout -- [file1] [file2] $ git checkout -- .
b. 撤銷緩存區的修改,將修改內容放回工做區,與工做區後期修改合併(clean 或者合併2處修改)
$ git reset HEAD xxx(文件名) $ git reset HEAD .
「儲藏」和「恢復」工做現場
$ git stash $ git stash list 查看 $ git stash apply stash內容並不刪除 $ git stash pop 恢復的同時把stash內容也刪了 $ git stash drop (.......)
提交文件到版本庫
git commit -m "commit_info";
git commit -a -m "commit_info";
git commit --amend;
查看信息
git diff --cached;
git diff <file-name> --cached;
git log
;參數-p
展開每次提交的內容差別,用-2
顯示最近的兩次更新,如git log -p -2
;tag標籤
git tag <name>
git git tag -a <標籤名> -m "<註釋>"
git tag
git tag -d <標籤名>
git push
git fetch origin <分支名>
git push origin --delete <遠程的分支名>
git push origin <標籤名>
git push origin --delete <標籤名>
【注】本文章借鑑了網上一些文章,系統學習能夠參考廖雪峯GIT教程