Git工具
git log 命令
假设是1c002dd.... 。如果你想git show 这次提交,下面的命令是等价
$ git show 1c002dd4b536e7479fe34593e72e6c6c1819e53b
$ git show 1c002dd4b536e7479f
$ git show 1c002d
Git 可以为你的SHA-1 值生成出简短且唯一的缩写。如果你传递--abbrev-commit 给
git log 命令,输出结果里就会使用简短且唯一的值;它默认使用七个字符来表示,不过必
要时为了避免SHA-1 的歧义,会增加字符数:
$ git log --abbrev-commit --pretty=oneline
在你工作的同时,Git 在后台的工作之一就是保存一份引用日志——一份记录最近几个月
你的HEAD 和分支引用的日志。
用git reflog 来查看引用日志
想要看类似于git log 输出格式的引用日志信息,你可以运行git log –g
祖先引用
另一种指明某次提交的常用方法是通过它的祖先。如果你在引用最后加上一个ˆ,Git 将
其理解为此次提交的父提交
想看上一次提交,你可以使用HEADˆ,意思是“HEAD 的父提交”:git show HEAD^
你也可以在ˆ 后添加一个数字——例如,d921970ˆ2 意思是“d921970 的第二父提交”。
另外一个指明祖先提交的方法是~。这也是指向第一父提交,所以HEAD~ 和HEADˆ 是等
价的。当你指定数字的时候就明显不一样了。HEAD~2 是指“第一父提交的第一父提交”,
也就是“祖父提交”——它会根据你指定的次数检索第一父提交。
提交范围
现在你已经可以指明单次的提交,让我们来看看怎样指明一定范围的提交。
最常用的指明范围的方法是双点的语法。这种语法主要是让Git 区分出可从一个分支中
获得而不能从另一个分支中获得的提交
最后一种主要的范围选择语法是三点语法,这个可以指定被两个引用中的一个包含但又
不被两者同时包含的分支。
交互式暂存
Git提供了很多脚本来辅助某些命令行任务。
如果你运行git add时加上-i或者--interactive选项,Git就进入了一个交互式的shell模式
暂存和撤回文件
如果你在What now>的提示后输入2或者u,这个脚本会提示你那些文件你想要暂存
如果想暂存你可以输入相应的编号,
每个文件旁边的*表示选中的文件将被暂存。如果你在update>>提示后直接敲入回车,Git
会替你把所有选中的内容暂存:
如果这时你想要撤回某文件,就使用3或者r(代表revert,恢复)选项
储藏(Stashing)
你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。
“‘储藏”“可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存
的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。
要查看现有的储藏,你可以使用git stash list
到三个不同的储藏。你可以重新应用你刚刚实施的储藏,所采用的命令就是之前在原始的stash 命令的帮助输出里提示的:git stash apply。如果你想应用更早的储藏,你可以通过名字指定它,像这样:gitstash apply stash@2。如果你不指明,Git 默认使用最近的储藏并尝试应用它
apply 选项只尝试应用储藏的工作——储藏的内容仍然在栈上。要移除它,你可以运行
git stash drop,加上你希望移除的储藏的名字
如果你只想修改最近一次提交说明,这非常简单:$ git commit --amend
用git blame来标注文件,查看那个方法的每一行分别是由谁在哪一天修改的。下面这个例子使用了-L选项来限制输出范围在第12至22行