博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GIT 不常用的实用命令
阅读量:7068 次
发布时间:2019-06-28

本文共 2729 字,大约阅读时间需要 9 分钟。

hot3.png

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

145908_qXXj_149945.png

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      提交说明 注:作者是指最后一次修改文件的人;而提交者是指提交该文件的人。

150015_p1gy_149945.png

其他:

--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 版本号 恢复

150153_vV1N_149945.png

转载于:https://my.oschina.net/laigous/blog/1549071

你可能感兴趣的文章
BSON与JSON的区别
查看>>
我的友情链接
查看>>
Play Framework 模板里使用注入访问数据层
查看>>
今天打开阿里妈妈惊现 ¥50 元佣金
查看>>
Oracle 正确删除archivelog文件
查看>>
Tigase XMPP Server源码部署
查看>>
Intellij IDEA创建Maven Web项目
查看>>
java 7 入门书籍
查看>>
Android Pdf文档的生成、显示与打印
查看>>
SpringMVC三种异常处理方式
查看>>
w命令
查看>>
golang使用oracle碰到go/lib/time/zoneinfo.zip: no such file or directory
查看>>
quartz定时任务时间设置描
查看>>
ES6常用语法
查看>>
https://www.jianshu.com/p/dbffae16ba0b
查看>>
微信,QQ这类IM app怎么做——谈谈Websocket
查看>>
在Ubuntu 11.04中安装Openresty
查看>>
JAVA常见的面试题
查看>>
《Python高效开发实战》实战演练——建立应用2
查看>>
java: -source 1.6 中不支持 switch 中存在字符串.....
查看>>