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的用户部分完成,现在开始做文章管理部分.文章部分根据涉及显示现实文章列表,发布文章,修改文章,删除文章等功能.最终的实现目标是使用权限来控制用户是否能进行相应操作,管理员权限的会显示 ...
随机推荐
- SparseArray源码解析
转载自SparseArray源码解析 No1: Android官方推荐:当使用HashMap(K, V),如果K为整数类型时,使用SparseArray的效率更高. No2: HashMap是使用数组 ...
- HDU 2955_Robberies 小偷抢银行【01背包】
<题目链接> 题意: 先是给出几组数据,每组数据第一行是总被抓概率p(最后求得的总概率必须小于他,否则被抓),然后是想抢的银行数n.然后n行,每行分别是该银行能抢的钱数m[i]和被抓的概率 ...
- 聊聊ReentrantLock的内部实现
大家都用过ReentrantLock,但是大家对内部实现是否足够了解呢,下面我就简单说一下其中的实现原理. ReentrantLock是可重入锁,也就是同一个线程可以多次获取锁,每获取一次就会进行一次 ...
- Spring框架学习05——AOP相关术语详解
1.Spring AOP 的基本概述 AOP(Aspect Oriented Programing)面向切面编程,AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查 ...
- Get package name
public class GetPackageName { public static void main(String[] args) { GetPackageName obj = new GetP ...
- C#窗体向另一个窗体实时传值及传值问题
C#窗体向另一个窗体实时传值 另外的传值方法:
- C++ 类模板基础知识
类模板与模板类 为什么要引入类模板:类模板是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类 ...
- Redis集群方案总结
Redis集群方案总结 Redis集群方案总结Codis其余方案Redis cluster 目前,Redis中目前集群有以下几种方案: 主从复制 哨兵模式 redis cluster 代理 codis ...
- java给时间格式化
package com.apress.springrecipes.sequence; import java.text.DateFormat;import java.text.SimpleDateFo ...
- WPF(C#)与MATLAB混合编程
WPF(C#)与MATLAB混合编程 WPF可以为开发者提供便捷地构建用户交互界面的解决方法,而matlab则在科学计算方面有着无与伦比的优势,因此在一些需要将科学算法转换为应用软件的项目中,需要应用 ...