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 diff和git 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-patch和git 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用法
Git应用实践(二)的更多相关文章
- 干货:基于 Git Flow 的 Git 最佳实践(附加解决大家经常碰到的问题)
突然想写这一篇Git的使用心得,主要有几个原因,其一是自己使用Git也有快3年时间了,其间自己经历过一些坑,也有迷茫的时候,在呆过的大大小小的团队中,其实每个人也都并不是Git专家,很多对于流程以及G ...
- Git 最佳实践:分支管理
5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践.最后我为团队选择了这个git分支管理实践 A successful Git branching ...
- 小丁带你走进git的世界二-工作区暂存区分支
小丁带你走进git的世界二-工作区暂存区分支 一.Git基本工作流程 1.初始化一个仓库 git init git clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 ...
- ASP.NET MVC5 网站开发实践(二) Member区域–管理列表、回复及删除
本来想接着上次把这篇写完的,没想到后来工作的一些事落下了,放假了赶紧补上. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一) - 项目框架 ASP ...
- ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询
上次把咨询的架构搭好了,现在分两次来完成咨询:1.用户部分,2管理部分.这次实现用户部分,包含两个功能,查看我的咨询和进行咨询. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NE ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构
咨询.留言.投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言.投诉都是咨询).咨询跟文章非常相似,而且内容更少.更简单. ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 修改及删除文章
上次做了显示文章列表,再实现修改和删除文章这部分内容就结束了,这次内容比较简单,由于做过了添加文章,修改文章非常类似,就是多了一个TryUpdateModel部分更新模型数据. 目录: ASP.N ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表
显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据 目录 ASP.N ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章
上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 文章管理架构
上次把member的用户部分完成,现在开始做文章管理部分.文章部分根据涉及显示现实文章列表,发布文章,修改文章,删除文章等功能.最终的实现目标是使用权限来控制用户是否能进行相应操作,管理员权限的会显示 ...
随机推荐
- mac配置php7运行环境
不用mac自带的apache和php,安装自己想要的版本.配置过程一直采坑,需要有闲时间和好的心理素质才行,哈哈,因为网上很教程都有纰漏之处,所以先把采坑无数后发现的个人认为最好的一个教程链接放在这里 ...
- 006.ks.cfg文件相关
一 图形化生成ks.cfg文件 [root@server ~]# yum -y install system-config-kickstart #安装图形化kickstart工具 [root@serv ...
- 029.Docker Compose部署Zabbix实战
一 前期规划 1.1 Zabbix架构图 1.2 其他规划 组件 类型 版本 备注 Zabbix Web zabbix-web-apache-mysql镜像 wordpress:latest 也可采用 ...
- android monitor 汉化 ddms
作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com android.jar\com\androi ...
- BZOJ.4793.[CERC2016]Hangar Hurdles(Kruskal重构树 BFS)
题目链接 \(Description\) 有一个\(n\times n\)的正方形网格,上面有若干障碍点.\(q\)次询问,每次询问把一个正方形箱子从\((x1,y1)\)推到\((x2,y2)\) ...
- Java并发程序设计(五)JDK并发包之线程复用:线程池
线程复用:线程池 一.为什么需要线程池 为了避免系统频繁地创建和销毁线程,使用线程池让线程进行复用.(即创建线程变成了从线程池中获取空闲线程,销毁线程变成了把线程放回线程池中.) 二.JDK对线程池的 ...
- 2553 ACM N皇后 回溯递归
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2553 中文题目,题意很简单. 思路:听说这是学习递归的经典题目,就来试试,发现自己一点想法都没有,一遇到递 ...
- js实现文字超出部分用省略号代替实例代码
关于超出一定字数用省略号显示的问题,这种要求在我们日常开发的时候经常见到,我们之前基本都是用CSS来完成的,今天给大家分享个Javascript实现这个功能的示例代码,有需要的可以参考借鉴. 话不多说 ...
- APP支付宝支付接入
1.app支付简介 买家可以在手机,掌上电脑等无线设备的应用程序内,通过支付宝(支付宝app或网页版支付宝)付款购买商品,且资金实行实时到账. 2.申请条件 1.申请前必须拥有经过实名认证的支付宝账户 ...
- 使用uploadify上传图片时返回“Cannot read property 'queueData' of undefined”
在使用uploadify插件上传图片时,遇到一个比较坑的错误:上传时提示“Cannot read property 'queueData' of undefined”. 遇到这个问题有点无语,因为这个 ...