Git 基本原理與常用命令
平時使用過兩種版本控制軟件 SVN 和 Git,平心而論,如果純粹自己使用,那么絕對 Git 更加適合,本地庫、遠程庫、離線工作、強大而靈活的分支、大名鼎鼎的Github, 這些都是選擇 Git 的原因。記得剛接觸時Git,感覺 Git 如此強大,再加上其是由大名鼎鼎的 Linus 所編寫,所以花了很多的時間看各種資料,不過后來那些不常用的命令與功能還是僅僅停留在知道與了解的層面。Git 只是一種工具,是為了滿足某種需求而被編寫出來的一種工具,對于工具做到善加利用即可。當然,要做到善加利用,一定要深刻理解 Git 所倡導的理念,以及其內部的實現原理。
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:// 等智能傳輸協議。
Git 插件
好的 IDE 基本都集成了 Git 插件,最性感的編輯器 sublime 也有第三方的 Git插件。這些插件基本對最常用的 Git 功能做好了菜單選項,所以通過對這些插件使用也能夠了解到 Git 日常使用中最常用的命令與功能。
Git 使用注意
如果正在 IDE 中使用 Git插件,就不要在命令行 (shell) 中在進行操作,對于一個 Git庫 同時有兩個進程來操作可能會導致可能莫名其妙的問題。所以如果覺得軟件的Git插件有的功能沒找到或操作不方便,那么建議先關掉 IDE ,然后在用命令行窗口中去執行 Git 命令。
Git 常用命令
這個不需要刻意去記,但是要有大體的了解,用時可以查看 help 或者 Google.
git help <command> # 顯示指定命令的help
git config --global user.name "your name"
git config --global user.email "your email"修改與提交
git status # 查看工作區狀態
git add <file> # 將指定文件修改提交到本地暫存區
git add . # 將所有修改過的文件提都交暫存區,不包括刪除,"."即表示正則匹配所有字符
git add --all # 將所有工作區修改提交到暫存區,包括 delete 掉的文件
git add -A # 同上
git commit -m"comments" # 將暫存區的內容提交到本地庫,并加上備注
git commit <file> # 提交暫存區指定文件
git commit . # 提交暫存區所有文件
git commit -a # 將git add, git rm和git commit等操作都合并在一起做,不包括新建文件
git commit -am "comments" # 同上+添加備注撤銷與恢復
git checkout -- <file> # 拋棄工作區指定文件的修改
git checkoout . # 拋棄工作區所有的修改
git reset <file> # 將指定文件從暫存區恢復到工作區
git reset -- . # 將所有文件從暫存區恢復到工作區
git reset --hard # 恢復最近一次提交過的狀態,工作區所有修改被放棄查看提交
git show # 顯示某次提交的內容
git show $id
git log
git log <file> # 查看該文件每次提交記錄
git log -p <file> # 查看每次詳細修改內容的diff
git log -p -2 # 查看最近兩次詳細修改內容的diff
git log --stat # 查看提交統計信息差異對比
git diff <file> # 比較當前文件和暫存區文件差異
git diff <$id1> <$id2> # 比較兩次提交之間的差異
git diff <branch1>..<branch2> # 在兩個分支之間比較
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 <new_branch> # 創建新的分支
git checkout <branch> # 切換到某個分支
git checkout -b <new_branch> # 創建新的分支,并且切換過去
git branch -v # 查看各個分支最后提交信息
git branch -r # 查看遠程分支
git branch --merged # 查看已經被合并到當前分支的分支
git branch --no-merged # 查看尚未被合并到當前分支分支
git checkout $id # 把某歷史提交checkout出來,無分支信息,切換到其他分支會自動刪除
git checkout $id -b <new_branch> # 把某歷史提交checkout出來,創建成一個分支
git branch -d <branch> # 刪除某個分支
git branch -D <branch> # 強制刪除某個分支 (未被合并的分支被刪除的時候需要強制)關于遠程倉庫
git remote add origin <remote> # 添加遠程庫
git remote -v # 查看遠程服務器地址和倉庫名稱
git remote show origin # 查看遠程服務器倉庫狀態
git remote rm <repository> # 刪除遠程倉庫
git push -u origin master # 客戶端首次提交
git push -u origin develop # 首次將本地develop分支提交到遠程develop分支,并且track跟蹤遠程庫和本地庫
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop </pre>