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"