[时间: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应用实践(二)的更多相关文章

  1. 干货:基于 Git Flow 的 Git 最佳实践(附加解决大家经常碰到的问题)

    突然想写这一篇Git的使用心得,主要有几个原因,其一是自己使用Git也有快3年时间了,其间自己经历过一些坑,也有迷茫的时候,在呆过的大大小小的团队中,其实每个人也都并不是Git专家,很多对于流程以及G ...

  2. Git 最佳实践:分支管理

    5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践.最后我为团队选择了这个git分支管理实践 A successful Git branching ...

  3. 小丁带你走进git的世界二-工作区暂存区分支

    小丁带你走进git的世界二-工作区暂存区分支 一.Git基本工作流程 1.初始化一个仓库 git  init git  clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 ...

  4. ASP.NET MVC5 网站开发实践(二) Member区域–管理列表、回复及删除

    本来想接着上次把这篇写完的,没想到后来工作的一些事落下了,放假了赶紧补上. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一) - 项目框架 ASP ...

  5. ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询

    上次把咨询的架构搭好了,现在分两次来完成咨询:1.用户部分,2管理部分.这次实现用户部分,包含两个功能,查看我的咨询和进行咨询. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NE ...

  6. ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构

    咨询.留言.投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言.投诉都是咨询).咨询跟文章非常相似,而且内容更少.更简单. ...

  7. ASP.NET MVC5 网站开发实践(二) Member区域 - 修改及删除文章

    上次做了显示文章列表,再实现修改和删除文章这部分内容就结束了,这次内容比较简单,由于做过了添加文章,修改文章非常类似,就是多了一个TryUpdateModel部分更新模型数据.   目录: ASP.N ...

  8. ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表

    显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据   目录 ASP.N ...

  9. ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

    上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...

  10. ASP.NET MVC5 网站开发实践(二) Member区域 - 文章管理架构

    上次把member的用户部分完成,现在开始做文章管理部分.文章部分根据涉及显示现实文章列表,发布文章,修改文章,删除文章等功能.最终的实现目标是使用权限来控制用户是否能进行相应操作,管理员权限的会显示 ...

随机推荐

  1. ubuntu 18图形界面

    sh .start_mode.sh: 换操作方式(图形界面,终端界面): 桌面版: 界面中 ctrl + shift + t 打开终端 ctrl + shift + "+" 放大字 ...

  2. 用VScode来编写C / C ++代码

    Microsoft C / C ++扩展提供了对Visual Studio Code的C / C ++支持,以便在Windows,Linux和macOS上使用VS Code实现跨平台C和C ++开发. ...

  3. Scala面向接口

    trait Logger{ def log(message:String){ println("Logger:"+message) } } trait RichLogger ext ...

  4. Javascript实现对象的创建

    能使用{}创建对象就不要使用new Object,能使用[]创建数组就不要使用new Array,JS中字面量的访问速度要高于对象. 1.通过object构造函数创建单个对象 var o = new ...

  5. 早期(编译器)优化--Java语法糖的味道

    1.泛型与类型擦除 泛型的本质是参数化类型的应用,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口和泛型方法.在泛型没有出现之前,只能通过 ...

  6. 在Windows系统配置Jekyll

    Jekyll 是一个简单的网站静态页面生成工具.由于是用Ruby语音编写的,所以在Windows系统上配置起来还是稍微有点繁琐的.具体过程如下: 安装Ruby:在Windows系统上当然使用rubyi ...

  7. Leaflet_创建地图(官网示例,可以直接运行)(2017-10-20)

    官网:http://leafletjs.com/examples.html 快速启动指南 http://leafletjs.com/examples/quick-start/example.html ...

  8. db2报错信息

    sqlcode sqlstate 说明000 00000 SQL语句成功完成01xxx SQL语句成功完成,但是有警告+012 01545 未限定的列名被解释为一个有相互关系的引用+098 01568 ...

  9. Delphi自写组件:可设置颜色的按钮

    unit ColorButton; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, StdCtrls; ...

  10. windows环境下面批量新建文件夹

    md D:批量新建文件夹\2026 md D:批量新建文件夹\2030 md D:批量新建文件夹\2032 md D:批量新建文件夹\1835 md D:批量新建文件夹\1832 电脑桌面新建文档 - ...