git rev-parse --git-dir 显示版本库.git目录所在的位置
git rev-parse --show-toplevel  显示工作区根目录
git log -1 --pretty=raw 
git cat-file -t ID  查看ID对应的内容
git cat-file -t ID  查看ID对应的存储记录
git log --graph --oneline  可以显示更短小的提交ID
git reset --hard +id或HEAD等 重置游标
可以用reflog挽回重置
git reflog show master |head -5  git
reflog命令,对文件进行操作,使用show子命令可以显示此文件的内容,其与直接查看文件tail
-5
.git/log/refs/heads/master的不同在于显示顺序的不同,即最新改变的放在最前面显示
git reset --hard master@{2}
git reset 仅用HEAD指向的目录树重置暂缓区,工作区不受到影响,相当于之前用git
add命令更新到暂缓区的内容撤出暂缓区,引用也未改变,因为引用重置到HEAD相当于没有重置,相当于git
reset HEAD
git reset -- filename
仅想文件filename的改动撤出暂存区,暂存区中其他文件不改变,相当于git add
filename的反操作,=git reset HEAD filename

git reset --soft HEAD^
工作区和暂存区不改变,但是引用向前回退一次,当对最新提交的提交说明或提交的更改不满意时,撤销最新的提交以便重新提交

git stash 可以用于保存和恢复工作进度
git stash 保存当前的工作进度,会分别对暂存区和工作区的状态进行保存
git stash list 显示进度列表
git stash pop [--index] []
如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的工作进度列表中清除,选项--index除了恢复工作区的文件外,还尝试恢复暂存区
git stash drop [] 删除一个存储的进度,默认删除最近的进度
git stash clear  删除所有的存储进度
git stash branch   基于进度创建分支

git
版本库的忽略文件功能:忽略只能对未跟踪文件有效,,对已经加入版本库的文件无效。
忽略分类:
共享式忽略:文件.gitignore设置的文件忽略是共享式的,之所以称之为共享式,是因为.gitignore被添加到版本库后成为版本库的一部分,当版本库共享给他人(克隆),或者把版本库推送到集中式的服务器时,这个忽略文件就会出现在他人的工作区中,文件忽略在他人的工作区一样生效。
独享式忽略:不会因为版本库的共享或者版本库之间的推送传递给他人文件忽略,独享式忽略分为两种:
1、针对具体版本库的独立式忽略,即在版本库.git目录下的一个文件.git/info/exclude来设置忽略文件
2、另外一种全局的独立式忽略,即通过git配置变量core.excludesfile指定的一个忽略文件。其设置的忽略对所有版本库均有效
eg: git config --global core.excludesfile /home/cp/.gitignore

忽略语法:
1、如果名称的最前面的一个路径分隔符(/),表明要忽略的文件在此目录下,而非子目录的文件
2、如果名称的最后面是一个路径分隔符(/),表明要忽略的是整个目录,同名文件不忽略,否则同名的文件和目录都忽略
3、通过在名称的最后面添加一个感叹号(!),代表不忽略
git commit --amend 修复式提交

git克隆
用法1:git clone  
:将指向的版本库创建一个克隆到目录,目录相当于克隆版本库的工作区,文件都会检出,版本库位于工作区下的.git目录中
用法2:git clone --bare  
用法3:git clone --mirror  
用法2和用法3创建的克隆版本库都不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库,一般约定俗成的裸版本库的目录名称以.git为后缀;用法3区别于用法2支出在于用法3克隆出来的裸版本对上游版本库进行了注册这样可以在裸版本库中使用git fetch命令和上游版本库进行持续同步。
git pull [] []
git push [] []

对等版本库:不适用--bare或--mirror创建出来的克隆包含工作区。这样的版本库只有一种可行的操作模式,就是备份库执行git pull命令从源库中拉回新的提交实现版本库同步。
git init --bare 也可以生成裸版本库

 
 暂存区操作引入的临时对象,可以用git fsck命令查看到版本库中包含的没有被任何引用关联的松散对象;可以用git prune 命令彻底将文件从版本库中删除(清除暂存区操作时引入的临时对象,但是如果要是用重置命令抛弃的提交和文件就不会被轻易清除)

git reflog expire --expire=now --all
--expire= 参数,强制让之前的记录全部过期
再执行git prune
git ls-remote 命令显示远程版本库的引用对应的SHA1哈希值
禁止非快进式推送:
1、更改服务器版本库/path/to/repos/shared.git的配置变量
git --git-dir=/path/to/repos/shared.git config receive.denyNonFastForwards
true

git tag 显示里程碑
git tag -n
在显示里程碑的时候同时显示说明,使用显示多少行里程碑的说明
git tag  -l jx/v2*  使用通配符过滤显示
git log --oneline --decorate 可以查到提交对应的里程碑及其引用
git describe 将提交显示为一个易记的名称
建立里程碑:
用法1:git tag []
用法2:git tag -a []
用法3:git tag -m []
用法4:git tag -s []
用法5:git tag -u  []
方法1是创建轻量级里程碑,方法2、3都是创建带说明的里程碑,方法三直接通过-m参数提供创建里程碑的说明,方法4、5是创建带GnuPG签名的里程碑