平時使用過兩種版本號控制軟體 svn 和 git,平心而論,假設純粹自己使用,那麼絕對 git 更加適合,本地庫、遠端庫、離線工作、強大而靈活的分支、大名鼎鼎的github, 這些都是選擇 git 的原因。記得剛接觸時git,感覺 git 如此強大,再加上其是由大名鼎鼎的 linus 所編寫,所以花了非常多的時間看各種資料,不過後來那些不經常使用的命令與功能還是只停留在知道與了解的層面。git 不過一種工具,是為了滿足某種需求而被編寫出來的一種工具,對於工具做到善加利用就可以。當然,要做到善加利用,
一定要深刻理解 git 所倡導的理念,以及其內部的實現原理。
這裡推薦
@廖雪峰 所寫的乙個很淺顯易懂的
git教程 ,我當時就花了乙個下午照著教程學操作一遍,然後就開始使用 git 了。
git 本質上是一套
內容定址檔案系統。從內部來看,git 是簡單的 key-value 資料儲存。它同意插入隨意型別的內容,並會返回乙個鍵值,通過該鍵值能夠在不論什麼時候再取出該內容。這些物件都壓縮儲存,而且以其自身的 sha-1 雜湊值作為唯一標示。它同意插入隨意型別的內容,並會返回乙個鍵值,通過該鍵值能夠在不論什麼時候再取出該內容。
git主要包括 3 類物件:
blog(儲存檔案資料)、tree(類似於資料夾)、commit。每次 git 提交都會產生乙個 commit 物件,並更新有修改的檔案所關聯的全部 tree 物件。多個 tree 物件一起記錄了包括整個專案全部 blob 物件的資訊, 並
構成了(dag)有向無環圖 。所以在不論什麼時間點不論什麼情況下,通過 commit 物件關聯的唯一根節點 tree,都能夠遍歷找出整個專案在這次 commit 狀態下的所有檔案。
git 能夠以兩種基本的方式
跨越兩個倉庫資料傳輸:基於http協議之上,和 file://, ssh://, git:// 等智慧型傳輸協議。
好的 ide 基本都整合了 git 外掛程式,最**的編輯器 sublime 也有第三方的 git外掛程式。這些外掛程式基本對最經常使用的 git 功能做好了選單選項,所以通過對這些外掛程式使用也可以了解到 git 日常使用中最經常使用的命令與功能。
假設正在 ide 中使用 git外掛程式,就不要在命令列 (shell) 中在進行操作,對於乙個 git庫 同一時候有兩個程序來操作可能會導致可能莫名其妙的問題。所以假設認為軟體的git外掛程式有的功能沒找到或操作不方便,那麼建議先關掉 ide ,然後在用命令列窗體中去執行 git 命令。
這個不須要刻意去記,可是要有大體的了解,用時能夠檢視 help 或者 google.
git help # 顯示指定命令的help
git config --global user.name "your name"
git config --global user.email "your email"
# 改動與提交
git status # 檢視工作區狀態
git add # 將指定檔案改動提交到本地暫存區
git add . # 將全部改動過的檔案提都交暫存區,不包含刪除,"."即表示正則匹配全部字元
git add --all # 將全部工作區改動提交到暫存區,包含 delete 掉的檔案
git add -a # 同上
git commit -m"comments" # 將暫存區的內容提交到本地庫,並加上備註
git commit # 提交暫存區指定檔案
git commit . # 提交暫存區全部檔案
git commit -a # 將git add, git rm和git commit等操作都合併在一起做,不包含新建檔案
git commit -am "comments" # 同上+加入備註
# 撤銷與恢復
git checkout -- # 拋棄工作區指定檔案的改動
git checkoout . # 拋棄工作區全部的改動
git reset # 將指定檔案從暫存區恢復到工作區
git reset -- . # 將全部檔案從暫存區恢復到工作區
git reset --hard # 恢復近期一次提交過的狀態,工作區全部改動被放棄
# 檢視提交
git show # 顯示某次提交的內容
git show $id
git log
git log # 檢視該檔案每次提交記錄
git log -p # 檢視每次具體改動內容的diff
git log -p -2 # 檢視近期兩次具體改動內容的diff
git log --stat # 檢視提交統計資訊
# 差異對照
git diff # 比較當前檔案和暫存區檔案差異
git diff <$id1> <$id2> # 比較兩次提交之間的差異
git diff
..# 在兩個分支之間比較
git diff --staged # 比較暫存區和版本號庫差異
git diff --stat # 只比較統計資訊
# 關於版本號
git tag #檢視版本號
git tag [name] #建立版本號
git tag -d [name] #刪除版本號
git tag -r #檢視遠端版本號
git push origin [name] #建立遠端版本號(本地版本號push到遠端)
# 關於分支
git branch # 建立新的分支
git checkout
# 切換到某個分支
git checkout -b # 建立新的分支,而且切換過去
git branch -v # 檢視各個分支最後提交資訊
git branch -r # 檢視遠端分支
git branch --merged # 檢視已經被合併到當前分支的分支
git branch --no-merged # 檢視尚未被合併到當前分支分支
git checkout $id # 把某歷史提交checkout出來,無分支資訊,切換到其它分支會自己主動刪除
git checkout $id -b # 把某歷史提交checkout出來,建立成乙個分支
git branch -d
# 刪除某個分支
git branch -d
# 強制刪除某個分支 (未被合併的分支被刪除的時候須要強制)
# 關於遠端倉庫
git remote add origin # 加入遠端庫
git remote -v # 檢視遠端server位址和倉庫名稱
git remote show origin # 檢視遠端server倉庫狀態
git remote rm # 刪除遠端倉庫
git push -u origin master # client首次提交
git push -u origin develop # 首次將本地develop分支提交到遠端develop分支,而且track
# 跟蹤遠端庫和本地庫
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop
【位址】
Git 基本原理
一 雜湊 雜湊是乙個系列的加密演算法,各個不同的雜湊演算法雖然加密強度不同,但是有以下幾個共同點 不管輸入資料的資料量有多大,使用同乙個雜湊演算法,得到的加密結果長度固定 雜湊演算法確定,輸入資料確定,輸出結果保證不變 雜湊演算法確定,輸入資料有變化,輸出結果一定有變化,而且通常變化很大 雜湊演算法...
Git基本原理
學習git的基本原理有利於理解git命令背後的執行原理,需要將腦子裡面之前關於其他版本管理工具比如cvs subversion perforce的知識暫時忘掉,因為它們與git的使用是不太相同的 其他版本工具比如vcs認為它們儲存的資訊是由一系列的檔案組成,以及每個檔案上做出的改動,git儲存資料時...
git筆記 基本原理
git是乙個分布式版本控制工具。乙個git專案有三個部分組成 工作目錄,本地倉庫和遠端倉庫。其中工作目錄和本地倉庫都在本地磁碟上,遠端倉庫一般可以理解為另一台電腦上的倉庫。工作目錄 就是被git管理的那些檔案 本地倉庫 主要包含兩部分 乙個commit樹,和一系列指向commit樹的指標。commi...