当前位置: 首页 > news >正文

GIT 不常用的实用命令

2019独角兽企业重金招聘Python工程师标准>>> 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

相关文章:

  • 关于windows下的Enter键
  • 彻底搞懂 PHP 变量结构体,多数文章观点不准确
  • perl shift
  • Ovirt 笔记
  • Oracle rownum用法的归纳
  • windows 上rsync客户端使用方法
  • 高性能存储代表 NETGEAR ReadyDATA 5200评测报告
  • nginx日志所有HTTP状态及次数统计
  • 添加本地通知(UILocalNotification)以及添加系统组件滚动视图(UIScrollView)
  • HTTP协议具体解释
  • MySQL配置文件my.cnf 例子最详细翻译
  • 如何在Linux和windos中创建指定大小的文件
  • Google Talk Testing(早期版本)
  • 重温SportsStore项目所遇到的问题总结
  • curl 上传文件
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【知识碎片】第三方登录弹窗效果
  • angular2开源库收集
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • js ES6 求数组的交集,并集,还有差集
  • Nodejs和JavaWeb协助开发
  • Sass Day-01
  • Service Worker
  • storm drpc实例
  • TypeScript实现数据结构(一)栈,队列,链表
  • vue2.0项目引入element-ui
  • vue-router 实现分析
  • Vue实战(四)登录/注册页的实现
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • ------- 计算机网络基础
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 目录与文件属性:编写ls
  • 排序算法学习笔记
  • 如何实现 font-size 的响应式
  • 使用 QuickBI 搭建酷炫可视化分析
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • AI算硅基生命吗,为什么?
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​学习一下,什么是预包装食品?​
  • #{}和${}的区别?
  • #define
  • #mysql 8.0 踩坑日记
  • #Z0458. 树的中心2
  • $.proxy和$.extend
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (3)llvm ir转换过程
  • (4)Elastix图像配准:3D图像
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (三)mysql_MYSQL(三)
  • (十一)c52学习之旅-动态数码管