注:目录(文件夹)的处理方式(递归处理其子文件)与文件雷同,下文将它们合称为文件。
1.3 Git基础
2.2 提交更新到仓库
查看文件状态
// 输出较为详细的信息
$ git status
// 使用-s(或--short)选项来输出简略信息
$ git status -s
?? untracked.readme // 未跟踪的新文件
A staged.txt // 已暂存的新文件
M modified.c // 右M:已修改、未暂存
M modified.cpp // 左M:已修改、已暂存
MM Modified.java // 修改并暂存后,又有新修改但未暂存
添加文件
// 开始跟踪新文件 或 把已跟踪的(且又有新改动的)文件放到暂存区。
$ git add README
// add还能用于合并时把有冲突的文件标记为已解决状态等
浏览已暂存和未暂存的修改
// 未暂存的修改:工作目录 VS 暂存区
$ git diff
// 已暂存的修改:暂存区 VS 仓库(最后一次提交的版本)
$ git diff --staged // 或 --cached
提交更新
// 注意:这行指令只提交暂存区的文件更新到,工作目录的不受影响。
// -m选项后面跟的是本次提交的阐述信息
$ git commit -m "新增xxx功能"
// 把工作目录中已跟踪的文件先暂存然后一并提交
$ git commit -a -m '修复某bug'
移动文件
$ git mv file_from file_to
删除文件
// 把文件从工作目录、暂存区删除并取消追踪。下次提交后会更新到仓库。
// 注意:通配符“*”之前要加“\”,留给Git用自身的比shell更佳的方法来扩展文件名。
$ git rm log/\*.log
// 如果文件已修改过(与仓库里的相比)并放入暂存区,
// 则需加上-f选项来强制删除(由于未提交到仓库,Git将无法恢复该文件)。
$ git rm -f README
// 把文件从暂存区删除并取消追踪,但在工作目录中保留。
$ git rm --cached README
2.3 浏览提交历史
// 基本命令
$ git log
// 以下为常用的选项:
// -p 用补丁来显示每次提交的文件变化
// -(n) 显示最近的n次提交,例如-2
// --stat 简单显示每个文件增删了多少行
// --shortstat 只显示--stat的最后一行:共有m个文件改动,共增删了n行
// --pretty 可以用来指定显示格式,比如:
// --pretty=oneline 仅用一行来显示每次提交
// --pretty=format:"%h - %an, %cd : %s" 指定自定义格式:
// %h 简短的提交哈希字符串(相当于提交操作的ID)
// %an 作者姓名
// %cd 提交日期
// %s (提交时写的)标题,比如“新增xxx功能”
// --graph 添加某些字符来形象地展示分支、合并历史
// --merges 筛选出合并分支的提交
// --since=<date> 查看指定时间之后的提交,例如--since="2016-3-5"
// --after=<date> 同上
// --until, --before 查看指定时间之前的提交
// -S<string> 仅显示增删了string的提交,
// 比如用-SonCreate查看那些改动过onCreate方法的提交
// --author=name 查看作者为name的提交
// --grep=<pattern> 仅显示标题含有pattern关键字的提交
// --all-match 若要使author与grep或者多个grep交叉过滤(交集),
// 需加上此选项,否则会显示能匹配任一条件的结果(并集)。
参考资料:
1、《ProGit》第二版
http://git-scm.com/book/en/v2