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

Git应用实践(二)

[时间:2017-08] [状态:Open]
[关键词:Git,git diff, git apply, git format-patch, git am, git log]

0-背景

距上次总结Git用法已经很久了。经过一段时间的Git命令行和图形界面的使用,我发现有些命令和功能还是需要了解下,要不在真正需要的的时候会很尴尬。比如:

  • 生成git专用的标准patch
  • 生成并合并patch
  • git log的常用参数:显示修改的文件列表,显示diff等等

撰写本文的目的很简单,就是为了后续使用可以参考下。

git diffgit apply

经常使用的git diff命令如下:

git diff > 123.diff // 将当前目录下的所有修改导出到diff文件中
git diff --cached > 456.diff // 将当前目录下所有暂存的修改导出到diff文件中
git diff libavformat/hls.c >f789.diff // 将特定文件中的修改导出到diff
git diff // 显示两个提交之间的diff

git diff是类似于linux下的diff工具,可用于非git环境下。对于其生成的diff或patch文件,可以通过git apply合并到git仓库下,即应用该patch,但并不创建提交信息,也就是说使用git applay之后,需要额外的手动完成commit的操作。比如下面命令将123.diff合并到当前目录下:

git apply 123.diff

注意,git apply是一个事务性操作的命令,只有成功和失败两种情况。在实际打补丁之前,建议使用git apply --check检查下当前分支下的状态。

git format-patchgit am

git format-patch生成的是git专用的patch,通常用于以电子邮件的形式进行提交。该命令的用法如下:

// 两个节点之间的所有提交
git format-patch <commit-A> <commit-B>

// 从节点A开始的n个提交
git format-patch -n <commit-A>

// 提取修改中R1和R2的所有提交,并通过git am合并到当前分支上
git format-patch -k --stdout R1..R2 | git am -3 -k

// 提取所有位于当前分支,并且不在origin分支的所有提交
git format-patch origin
// 最终输出为,每个提交一个单独的文件,保存在当前目录下

// 提取origin分支上从创建开始的所有的提交
git format-patch --root origin

// 提取最新的三个提交
git format-patch -3

使用git format-patch生成的patch建议使用git am合并。git am可以一次合并一个文件,或者一个目录下的所有patch。简单用法如下:

// 单个patch文件合并
git am 0001-xxx.patch

// 合并一个目录下的所有patch
git am ~/all-patch/*.patch

还可以使用git am --continue | --skip | --abort控制patch合并过程中的异常逻辑。

git log用法总结

在windows下使用tortoiseGit有很丰富的关于log的图形界面操作,比如查看特定文件的提交记录、每次提交修改的文件信息、版本修改图等等。那么在命令行中如何获取呢?

// 显示每次修改的文件列表及状态
git log --name-status

// 显示每次修改的文件列表
git log --name-only

// 显示每次修改的文件列表, 及文件修改的统计
git log --stat

// 显示每次修改的文件列表
git whatchanged

// 显示每次修改的文件列表, 及文件修改的统计
git whatchanged --stat

//显示最后一次的文件改变的具体内容
git show

// 以ASCII字符串形式表示的分支及其分化衍合的情况。
git log --graph

git log还支持以下命令:

-n 仅显示最近的n条提交
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。

小结

本文简单的整理了git diff / git apply、git format-patch / git am的用法,对此有一定了解,有助于更好的git的补丁机制,提高效率。
同时本文整理了git log的用法,解决很多对于图形界面用法的疑惑,值得后续参考。

参考资料

  • git manual
  • ProGit
  • git 显示最近修改的文件列表
  • 补丁git format-patch && git-am用法

转载于:https://www.cnblogs.com/tocy/p/git-using-tips-2.html

相关文章:

  • 软件项目管理第2次作业:豆瓣测评
  • 【个人训练】(POJ1276)Cash Machine
  • [转] logback 常用配置详解(序)logback 简介
  • 网络视频监控与人脸识别
  • 混合和过度绘制(图层性能 15.3)
  • 【u235】背单词
  • [置顶] 九月半集训总结
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • IntelliJ IDEA之版本控制
  • 【Python】【正则】
  • SharePoint REST API - 使用REST API和jQuery上传一个文件
  • localStorage小结
  • scrum学习心得
  • Mysql字符集设置
  • httpclient连接池
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • eclipse的离线汉化
  • egg(89)--egg之redis的发布和订阅
  • Python socket服务器端、客户端传送信息
  • Redis在Web项目中的应用与实践
  • 二维平面内的碰撞检测【一】
  • 前端之React实战:创建跨平台的项目架构
  • 微服务框架lagom
  • 详解移动APP与web APP的区别
  • 一、python与pycharm的安装
  • 移动端 h5开发相关内容总结(三)
  • 优化 Vue 项目编译文件大小
  • Prometheus VS InfluxDB
  • 湖北分布式智能数据采集方法有哪些?
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​用户画像从0到100的构建思路
  • (4)(4.6) Triducer
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (南京观海微电子)——I3C协议介绍
  • (一)认识微服务
  • (转)ABI是什么
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)大型网站架构演变和知识体系
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • *** 2003
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .bashrc在哪里,alias妙用
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net refrector
  • .net 无限分类
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .net下的富文本编辑器FCKeditor的配置方法
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .net专家(高海东的专栏)
  • .Net组件程序设计之线程、并发管理(一)
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [20140403]查询是否产生日志