Workspace:工作區
Index/Stage:暫存區,也叫索引
Repository:倉庫區(或本地倉庫),也存儲庫
Remote:遠程倉庫
先克隆一個遠程倉庫用於學習,三選一:
git clone https://github.com/schacon/simplegit-progit
git clone git://github.com/sitaramc/gitolite
git clone http://git.oschina.net/yiibai/git-start.git
初始配置
設置用戶名稱:
git config --global user.name ''
設置郵件地址:
git config --global user.email <>
對特定項目使用不同的用戶名稱與郵件地址,在該項目目錄中運行:
git config user.name ''
git config user.email
查看配置信息:
git config --list
查看某項配置:
git config <key>
編輯Git配置文件:
git config -e [--global]
中文顯示:
git config --global core.quotepath false
獲取幫助
man <verb>
創建倉庫
1) 在現有目錄中初始化倉庫,
git init
該命令將創建一個名爲 .git 的子目錄,這個子目錄含有初始化的 Git 倉庫中所有的必須文件;
2) 克隆遠程倉庫:
git clone[url]、gitclone [url] <本地名>
克隆時更改遠程倉庫名:
git clone -o <遠程倉庫名> [url]
查看狀態
git status
git status –s
git status --short
結果:
- ??- 未被跟蹤
- M- 被修改,出現在右邊的 M 表示該文件被修改了但是還沒放入暫存區,出現在靠左邊的 M 表示該文件被修改了並放入了暫存區。
- A- 新添加到暫存區
- D- 被刪除
- R- 重命名
忽略文件
創建一個名爲 .gitignore
的文件。GitHub 有一個十分詳細的針對數十種項目及語言的.gitignore 文件列表,你可以在https://github.com/github/gitignore找到它.
文件 .gitignore 的格式規範如下:
· 所有空行或者以 # 開頭的行都會被 Git 忽略。
· 可以使用標準的 glob 模式匹配。
· 匹配模式可以以(/)開頭防止遞歸。
· 匹配模式可以以(/)結尾指定目錄。
· 要忽略指定模式以外的文件或目錄,可以在模式前加上驚歎號(!)取反。
所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式。星號(*)匹配零個或多個任意字符;[abc]匹配任何一個列在方括號中的字符(這個例子要麼匹配一個字符 a,要麼匹配一個字符 b,要麼匹配一個字符 c);問號(?)只匹配一個任意字符;如果在方括號中使用短劃線分隔兩個字符,表示所有在這兩個字符範圍內的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的數字)。使用兩個星號(*) 表示匹配任意中間目錄,比如a/**/z 可以匹配 a/z, a/b/z 或 a/b/c/z等。
添加內容到下一次提交中
git add
這是個多功能命令:可以用它開始跟蹤新文件,或者把已跟蹤的文件放到暫存區,還能用於合併時把有衝突的文件標記爲已解決狀態等。
查看變化
查看修改後尚未暫存的文件的變化:
git diff
查看已經暫存文件的變化:
git diff --staged
git diff --cached
提交前找出空白錯誤(指行尾的空格、Tab 製表符,和行首空格後跟 Tab 製表符的行爲):
git diff --check
通過圖形化的方式或其它格式顯示變化:
git difftool
顯示該文件每次提交的diff:
git log -p <filename>
比較同一文件不同版本之間的差異:
git diff <commit_id1> <commit_id2> <file>
提交更新
git commit
#將所做的改變的 diff 輸出放到編輯器中從而使你知道本次提交具體做了哪些修改
git commit –v
#將提交信息與命令放在同一行
git commit –m '修改信息'
#對於已經跟蹤的文件可以跳過暫存直接提交
git commit –a
gitcommit –am '修改信息'
註釋規範
1) 用一空行分隔標題與正文。
2) 標題使用大寫字母。
3) 標題不超過50個字符。
4) 標題使用祈使語氣。
5) 標題不要使用句號結尾。
6) 正文在72個字符處換行。
7) 正文解釋是什麼和爲什麼,而不是如何做。
撤銷修改
實質是用版本庫裏的版本替換工作區的版本
git checkout -- <file>
從磁盤中刪除文件
git rm
刪除已經修改過的文件
git rm -f
#刪除 log/ 目錄下擴展名爲 .log 的所有文件
gitrm log/\*.log
覆蓋上一次的提交
#暫存區沒有文件時只是修改提交信息
git commit --amend
#提交未暫存的文件
git commit --amend -a -m
修改提交歷史
git commit --amend
(暫存區沒有文件時只是修改提交信息,修正會改變提交的 SHA-1 校驗和,它類似於一個小的變基 - 如果已經推送了最後一次提交就不要修正它。)
git commit --amend -a -m
(提交未暫存的文件)
git rebase -i HEAD~3
重命名
git mv <file_from> <file_to>
查看標籤
查看標籤:
git tag,git tag -l ' '
附註標籤:
git tag -a v1.4 -m ' '
查看標籤信息與對應的提交信息:
git show v1.4
輕量標籤:
git tag v1.4-lw
後期打標籤:
git tag -a v1.2 -m ' ' <校驗和(或部分校驗和)>
共享標籤,默認情況下,git push 命令並不會傳送標籤到遠程倉庫服務器上。 在創建完標籤後你必須顯式地推送標籤到共享服務器上:
git push <遠程倉庫> v1.5
一次性推送很多標籤:
git push <遠程倉庫> --tags
檢出標籤:
git checkout -b <branchname> <tagname>
別名
#git ci 等同於git commit
git config --global alias.ci commit
#gitunstage fileA 等同於git reset DEAD -- fileA
git config --global alias.unstage 'reset HEAD --'
外部命令,在命令前加 “!”
git config --global alias.visual '!gitk'
#設置git lg顯示方式
git config --global alias.lg "log--color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s%Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"