• 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的用法,解决很多对于图形界面用法的疑惑,值得后续参考。

    参考资料

  • 相关阅读:
    Spring(九)Spring中的两种自动代理
    Spring(八)Spring错题总结
    Spring(七)Spring中的四种增强和顾问
    SourceTree使用git
    Idea集成git
    SpringMVC--AbstractController抽象类限定请求提交
    SpringMVC处理器配置方式
    SpringMVC静态资源无法访问解决方案
    SpringMVC--视图解析器
    HandlerMapping执行流程
  • 原文地址:https://www.cnblogs.com/tocy/p/git-using-tips-2.html
Copyright © 2020-2023  润新知