1.git stash
使用场景:
1.当我们在本地做了一些修改,但并不适合提交时,这时需要到其他分支或线上分支做BUG修改或者其他任务时,我需要将目前的修改保存起来,然后再切换代码。
2.当我们发现代码的修改在非期望的分支上时,这时不能checkout到期望的分支上时,也需要将目前的修改保存起来,切完分支后再合并过来。 命令方式:git stash保存当前工作,并隐藏修改
git stash list 查看隐藏的列表
恢复隐藏:用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除 用git stash pop,恢复的同时把stash内容也删了
2.git gc
使用场景:
Git的底层并没有采用 CVS、SVN 底层所采用的那套增量式文件系统,而是采用一套自行维护的存储文件系统。当文件变动发生提交时,该文件系统存储的不是文件的差异信息,而是文件快照,即整个文件内容,并保存指向快照的索引。这种做法,提高 Git 分支的使用效率;但也容易导致代码仓库中内容重复程度过高,从而仓库体积过大。当遇到这种情况时,或者需要将仓库推送到远程主机时,就需要Git中的gc(garbage collect)功能,也就是垃圾回收功能。
Git 往磁盘保存对象时默认使用的格式叫松散对象 (loose object) 格式。我们可以运行 ' find .git/objects -type f ' 命令,查看一下 objects 目录里有多少对象 就细节而言,Git做了这几件事: pack_refs 过程、reflog expire 过程、repack 过程、prune 过程、rerere 过程
pack_refs 过程相当于执行"git pack-refs --all --prune",它会将$GIT_DIR/refs目录下的所有heads和tags打包成一个文件并保存为$GIT_DIR/packed-refs下。
reflog expire 过程相当于执行"git reflog expire --all",它会将删除所有超过期限而且没有被refs涉及的reflog条目。
repack 过程相当于执行"git repack -d -l",一般情况下还会包括"-A"选项,它会将所有未被包含在一个pack的松散对象连结成一个pack,也会将现有的pack重新组织为一个新的更有效率的pack,并删除冗余的pack(如果她们中存在不可达的松散对象,会先把这些对象释放出来)。
prune 过程相当于执行"git prune --expire",他会删除所有过期的、不可达的且未被打包的松散对象。
rerere 过程相当于执行"git rerere gc",这种情形下似乎没什么用。 延伸:我们新拉代码时有时并不需要拉取一堆历史信息可以用 git clone git --depth=1 来表示我拉取最近几次数据
3.git log
git log -n:显示最近几次的记录
git log -p:显示每次commit详细变更
git log file:查看文件、文件夹下提交记录 git log 比较:git log a ^b 查看 a分支有,而 b分支 中没有的
git log a..b想知道b比a多提交了什么
git log a...b想知道两个分支有什么不一样
git log --left-right a...b可以显示提交是在哪个分支上的“>”代表是属于b的,反之属于a
git log --author=**:查看由于谁提交的
git log --pretty按指定格式显示日志信息,可选项有: oneline,short,medium,full,fuller,email,raw 以及format:<string>,默认为medium,可以通过修改配置文件来指定默认的方式。
选项 说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明 注:作者是指最后一次修改文件的人;而提交者是指提交该文件的人。
其他:
--mergs 查看所有合并过的提交历史记录
--no-merges 查看所有未被合并过的提交信息
--since,--affter 仅显示指定时间之后的提交(不包含当前日期) $ git log --before={3,weeks,ago} --after={2010-04-18}
--until,--before 仅显示指定时间之前的提交(包含当前日期)
--grep 通过提交说明信息过滤提交日志 $ git log --grep=hotfix 该命令会列出所有包含hotfix字样的提交信息说明的提交记录 -S 通过查询文件的变更内容来检索出指定提交日志 注:-S后没有"=",与查询内容之间也没有空格符
git log -Sdubbo -p -2:查询最近两次带有dubbo的详细变更
--sortstat 只显示--stat中最后行数修改添加移除的统计
--graph 以简单的图形方式列出提交记录
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
4.git reflog
git reflog 可以查看所有分支的所有操作记录,包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录,关键时能救命! 如果我们在操作中误删了某一次提交,就可以通过这个命令找回当时的快照
我们可以用git reset --hard 版本号 恢复
也可以用git cherry-pick 版本号 恢复