Git 基礎

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

結果:

  1. ??- 未被跟蹤
  2. M- 被修改,出現在右邊的 M 表示該文件被修改了但是還沒放入暫存區,出現在靠左邊的 M 表示該文件被修改了並放入了暫存區。
  3. A- 新添加到暫存區
  4. D- 被刪除
  5. 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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章