快速入門系列--GIT版本控制工具

因爲GIT剛剛開始使用不久,常常會在Merge時出現沒有change-id的狀況,在結合gerrit使用時,常常出現不能提交的情形,使得本身很困擾。最近有次熬夜加班,在代碼完成後,因爲多人在很短期內提交屢次,形成提交不上去的狀況,當時那個慌啊。還好有給力的大神幫忙處理,忽然以爲有必要好好學學Git了,不能僅僅知足於圖形化工具的使用。html

  • 工做區、版本庫、緩存區的關係與區別,以下圖:git

工做區:左側的工做區就是咱們平常編輯的部分github

暫存區:使用git add XXX後的部分算法

版本庫:使用commit後的部分緩存

HEAD:當前版本指針服務器

 

  • Git中的tree,blob,commit,tag的概念,app

Blob: 就是一塊內存區域,其中內容能夠是文本,源碼或者圖片ssh

Tree: 很想文件系統中的目錄,能夠指向blob或者其餘的樹,就像目錄能夠包含文件和子目錄同樣分佈式

Commit: 包含提交者的信息(姓名,Email),指向當前提交下所屬的tree的指針,指向以前提交(父提交)的指針工具

Tag: 包含指向任意commit的指針,便於記錄和使用指定的tree,而不用使用哈希值。

 

Git命令 解釋
Git status 查看當前狀態
Git diff  
Git diff head  
Git diff --cached/--staged  
Git checkout 注意檢出時會修改指針、暫存區、工做區,所以要注意該操做可能會丟失修改
Git checkout - 切換到上一個分支
Git checkout <branch> 切換到指定branch
Git checkout –b new_branch 檢出並建立分支
Git branch  
Git branch –r  
Git commit –m 'XXX' 提交併添加評論,須要注意的是提交什麼的哈希碼,是經過SHA1算法得到的160bit哈希值,在分佈式版本控制系統中須要使用SHA1來惟一標識,而不是順序ID。
Git commit –am 'XXX'  
Git commit --allow-empty 容許空白提交
Git commit --amend 對剛剛的提交進行修補,不會產生新的提交。有時,在merge操做後,在gerrit出現不能提交的狀況,能夠經過該命令,爲merge commit產生一條changeID。其原理實際上是組合了兩條git命令,以下所示:
  Git reset --soft HEAD^
  Git commit –e –F .git/COMMIT_EDITMSG
Git add -i 進入交互式界面添加/修改/刪除文件到暫存區,git add .快速添加全部文件
Git add some_file  
Git rebase  
Git rebase –i 合併提交,將pick改成fixup
Git clean –nd 查看那些文件和目錄會被刪除
Git clean –fd 強制刪除多餘的目錄和文件
Git reset 省略commit標識號,至關於使用了HEAD的指向做爲提交ID。
Git reset --hard some_commit_hashcode 包含3個步驟:a.替換引用的指向;b.替換暫存區;c.替換工做區
Git reset --soft <commit> 包含1個步驟:a.替換引用的指向;
Git reset --mixed <commit>,默認方式 包含2個步驟:a.替換引用的指向;b.替換暫存區;
Git reset --soft HEAD^ 工做區和暫存區不變,但引用向前回退一次
Git stash 保存當前進度,會分別對暫存區和工做區的狀態進行保存,完整版本爲git stash save "XXX"
Git stash list 查看保存的進度列表
Git stash pop 從最近保存的進度進行恢復,並將該進度清除,
Git stash apply 恢復進度,而且不刪除
Git stash clear 刪除全部存儲的進度
Git stash branch branch_name 基於進度建立分支
Git log 查看日誌
Git log -i 查看指定條目很多天志
Git log --graph 以圖形化的方式查看日誌,在理解分支信息時頗有用
Git log –graph –pretty=oneline 只查看單行的commitID
Git reflog  
Git config –global user.name Git相關環境變量配置
Git config –global alias.ci "commit -s" 設置git操做別名,例如用ci表示相似SVN中的check in操做
Vim file_name  
Git grep 工做區文件內容搜索
Git clone XXX 拉代碼,能夠經過https和ssh等方式
ls 顯示當前路徑下的目錄和文件
Git rm/mv 在Git中刪除/移動文件
Gitk --all 最先的圖形化工具
Git blame 追溯文件的修改記錄(前提是bug已經定位到代碼上)
Git bisect 二分查找,
Git describe  
Git tag 查看里程碑列表
Git tag tagname 輕量級里程碑,在.git/refs/tags中。其餘仍是重量級里程碑等內容,包括數字簽名。
Git cherry-pick <branch>[^^] 揀選分支
Git revert HEAD 將HEAD提交反向再提交一次。因爲修改歷史操做只能是針對本身的版本庫,而沒法去修改別人的版本庫,這時就可能須要使用revert去修正一個錯誤的歷史提交。
Git init  
Git push 注意要禁止非快進式推送,理解不深
Git fsck 查看到版本庫中包含的沒有被任何引用關聯的鬆散對象(danglin開頭),多是commit也多是blob
Git prune 清理臨時文件(未被關聯的鬆散對象)
Git gc 垃圾回收,清理版本庫
Git fetch  
Git merge  
Git merge --no-ff None fast-forward,不快速向前
Git pull 拉去本地分支關聯的遠程分支的內容,並merge
git push origin :branch-name git 刪除遠程分支,冒號前空格不能少,表示把一個空分支push到server,至關於刪除
git remote [-v] 查看當前本地分支track的遠程分支
git remote show origin     顯示遠程全部的分支信息
git remote rename [a] [b] 重命名遠程庫
git remote  remove [a] 刪除遠程倉庫
git push -u origin release   建立遠程分支,配合git branch release
git grep -i -r "xxxx" 查找文件中內容

Tip:設置ssh到github,參考資料 

 

Android項目包含近200個Git版本庫,於是google公司開發了repo(對git的封裝)和gerrit兩個工具進行版本庫管理,其中gerrit是一種特別的集中式協同模型,經過SSH協議管理Git版本庫,並實現一個Web界面的評審工做流。其中,Git不能直接推送到分支,而是推送到特殊的引用refs/for/<branch-name>。

其中困擾我良久的change-id其實不是git中的概念,而是gerrit中的概念,它經過hooks的方式(其實就是面向切面的攔截器,在C語言中通常叫作hooks鉤子,位於.git\hooks\文件夾中)爲該次提交添加一個change-id,而後就能夠被gerrit管理起來了。Gerrit提交方式,Git push origin HEAD:refs/for/your_brance

Gerrit審覈服務器最初實際上是爲Android項目開發。Redmine是一款實現需求管理和缺陷跟蹤的項目管理軟件,能夠和Git版本庫實現整合,git的提交能夠之間關閉redmine上的Bug,同時Git的提交還能夠反映出項目成員的工做進度。Redmine中的用戶(項目成員)用一個ID作標識,而Git的提交者則用一個包含用戶名和郵件地址的字符串,須要一個關聯配置。

Git模型圖以下所示:

 

Tip:

主要供本身工做參考,如有疏漏,望見諒。參考蔣鑫大師的《GIT權威指南》和大塚弘記的GitHub入門與實踐,前者很是全面,後者簡單有效。

Git設置SSH

第一步:生成本機ssh key, ssh-keygen -t rsa -C "xxxxxx@yy.com"

第二步:設置用戶名密碼,$ git config --global user.name 「your_username」  #設置用戶名

$ git config --global user.email 「your_registered_github_Email」  #設置郵箱地址

第三步:測試是否成功,ssh -T git@github.com

對於git小烏龜來講:只須要在設置 -> git 編輯本地 .git/config 增長[credential]  helper = store便可

做  者:熊二哥
出  處:http://www.cnblogs.com/wanliwang01/ 版權聲明:本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文連接。

相關文章
相關標籤/搜索