1)Git有關的學習書籍和博客推薦
首先推薦的當然是ProGit這本書:https://git-scm.com/book/zh/v2
Git官網也有很多資料:https://git-scm.com/;https://git-scm.com/docs
有關的博客:http://www.yangzhiping.com/tech/github.html
Git命令詳解:http://blog.csdn.net/prike/article/details/50040723
Git遠程操作講解:http://www.ruanyifeng.com/blog/2014/06/git_remote.html
研發團隊 GIT 開發流程新人學習指南:http://blog.jobbole.com/110052/?utm_source=blog.jobbole.com&utm_medium=relatedPosts
2)如何佈置項目到Github
step01: 一般我們可以新建一個倉庫,給倉庫命名,並做相應的初始化處理。
step02:打開剛創建的倉庫,選擇本倉庫的設置界面,將分支選擇到master-branch這個選項,這樣可以簡單地理解爲還沒有分支合併。
step03:在本地安裝Git環境,這裏我選擇的是命令行模式,圖形化界面其實有時候沒有命令行模式更加便捷。Git官網
step04:在電腦中存放項目的目錄下點擊鼠標右鍵,選擇git bash here,進入Git bash模式。
step05:使用git clone 命令將項目從遠端Github服務器上拷貝到本地。格式爲:https://github.com/username/program.git或者拷貝本地的項目到當前目錄
step06:可以在本地對剛項目做一些修改,比如增加一個文件,添加一些自己寫的代碼。
step07: git add . 將本地的修改添加到上傳列表 ,也可以在add後面指定特定的文件名,只添加部分文件到遠端暫存區。
step08: git commit -m ”modify”將文件提交到暫存區。
step09: git pull 將遠端的項目快照下載到本地。
step10: git push講修改後的項目上傳到遠端服務器,這裏是github。
3)git與其他集中式版本控制工具的區別
版本控制工具的發展經歷了三個過程:
1. 本地的一些vcs(backup,rcs)
2. 集中式版本控制工具cvcs(cvs, svn,perforce)
3. 分佈式版本控制工具(git,mercurial,bazaar,darcs)。
常用的版本控制工具有:git, svn(subversion), perforce, cvs,bazaar等。
Git與SVN之間的區別:http://blog.jobbole.com/31444/
4)git中項目文件的三種狀態
- committed(已提交):表示數據已安全保持到服務器中;
- modified(已修改):修改了文件,還沒有保存到服務器中;
- staged(已暫存):對已修改的文件做了標記,使得在下次提交 時也提交它的快照。
本地的項目路徑下,是工作區。暫存但還沒有提交到遠端服務器的區域稱爲staging area。遠端服務器的項目稱爲git directory。
5)Github代碼貢獻使用流程
- Fork別人的項目
- 下載項目到本地進行修改貢獻
- 從master分支中創建一個新的分支
- 將這個分支推送到github上
- 創建一個合併請求
- 討論,根據實際情況繼續修改
- 項目的擁有者合併或關閉貢獻者的合併請求
6)Git 常用的command
查看當前git 的版本配置情況
git config –list;也可以查看某一項git配置 git config key查看當前git 的版本號
git version查看文件狀態
git status -v設定特定的文本編輯器
git config –global core.editor vim(emacs)使用git獲取幫助
git help verb顯示當前目錄中文件的狀態
git status -s
?? file1:新添加未跟蹤的文件
A file2:新添加到暫存區的文件
M file3:M在右邊表示該文件被修改了但還沒有放入暫存區,M在左邊表示該文件被修改了,並放入了暫存區。
MM file4:在工作區修改並提交到暫存區後,又在工作區做了修改,所以在暫存區和工作區都有該文件被修改過的記錄。設定當前項目或目錄中不會更新到遠端的文件
創建隱藏文件.gitignore,在該文件中可以依據正則表達式定義需要過濾git管理的文件,比如*.log會過濾到所有log文件。這樣,即使使用了git add 命令將其加入到暫存區,log文件也不會更新到遠端倉庫。
.gitignore格式規範- 空行或以#開頭行相當於註釋,會被git忽略
- 可使用標準glob模式匹配
- 以/開頭表示防止遞歸,防止忽略下一層目錄的相關文件
- 以/結尾指定目錄
- 要反向忽略指定模式以外的文件或者目錄,可以在模式前加!取反。
比較差異
git diff 比較的是當前目錄中文件和暫存區域snapshort之間的差異,也就是修改之後還沒有暫存起來的變化內容。
git diff –cached 或 git diff –staged 查看已暫存的將要添加到下次提交裏的內容。自動提交
git commit -a 自動把所有已跟蹤過的文件暫存起來一併提交,從而跳過git add步驟。修改文件名
git mv file1 file2從暫存區移除,但在工作區不刪除該文件
git rm –cached filename從暫存區和工作區同時刪除文件
git rm file
git rm -f file 強制刪除modify之後在暫存區的文件。查看提交的歷史記錄 git log
常用option:- -p : 顯示每次提交的內容差異
- -num 僅顯示最近num次提交的內容
- –stat 總結有多少文件被修改以及被修改過的文件具體哪些行被移除(-)或添加了哪些行(+)
- –pretty (=oneline,short, full fuller) format 定製格式化輸出
- –graph 展示分支,合併歷史。
- –since=2.weeks 列出最近兩週內的提交
- –author 指定作者的提交歷史
- –grep 搜索提交說明中的關鍵字
- –all -match 同時滿足所有限制條件
- –until –before 總結指定時間。
git commit –amend 提交後如果發現忘記了暫存的某些需要的修改,可以使用命令
1.git commit -m ‘initial commit’
2.git add forgotten file
3.git commit –amend取消暫存文件
git reset HEAD filename取消對文件的修改(該命令不可逆,慎重!)
git checkout – filename添加遠程倉庫
git remote add shortname https://github.com/username/program_name對遠程倉庫重命名
git remote rename old_name new_name刪除遠程倉庫
git remote rm short_nametag
git的tag分兩種,lightweight(輕量級標籤,臨時使用) 和annotated附註標籤(推薦使用)
git show 可以查看tag信息及相應的提交信息
git tag -a v1.0 -m ‘my first version’
-m 是必須的,用來存儲在tag中的信息
-a 是用來添加附註標籤。
lightweight標籤不需要添加-m -a 的option給已經提交過的項目追加tag
git log –pretty=oneline 查看校驗和
git tag -a version 檢驗和部分值共享標籤
git push origin version一次性將所有標籤上傳到remote servers
git push origin –tags創建分支命令
git branch branch_name1 branch_name2顯示本項目的所有分支
git branch查看各個分支當前所指的對象
git log –oneline –decorate分支切換
git checkout branch_name創建分支並切換到該分支
git checkout -b branch_name
相當於1. git branch branch_name+git checkout branch_name刪除分支
git branch -d branch_name合併分支1到分支2(master)
git checkout master+git merge branch_1強制刪除分支
git branch -D branch_name查看每個分支的最後一次提交
git branch -v