我如何生成自上次拉动以来发生了什么变化的git diff?

我如何生成自上次拉动以来发生了什么变化的git diff?

How can I generate a git diff of what's changed since the last time I pulled?

我想将以下操作编写为一个命令,最好是在rake中编写脚本:

  • 获取本地git存储库的版本。
  • Git拉最新的代码。
  • Git diff从我在步骤1中提取的版本到现在我的本地存储库中的版本。
  • 换句话说,我想从中央存储库中获取最新的代码,并立即生成自上次提取以来发生的变化的差异。


    您可以使用refspec相当简单地做到这一点。

    1
    2
    git pull origin
    git diff @{1}..

    这将使您对分支之前和之后存在的当前分支有所不同。请注意,如果拉取实际上并没有更新当前分支,则diff将为您提供错误的结果。另一个选择是显式记录当前版本:

    1
    2
    3
    current=`git rev-parse HEAD`
    git pull origin
    git diff $current..

    我个人使用的别名只是以反向顺序(即从最旧到最新)向我显示了自我上次拉取以来所有提交的日志,没有合并。每当我的pull更新分支时,我都会运行此命令:

    1
    git config --global alias.lcrev 'log --reverse --no-merges --stat @{1}..

    格雷格的方法应该起作用(不是我,其他格雷格:P)。关于您的评论,origin是一个配置变量,当您将中央存储库克隆到本地计算机时由Git设置。本质上,Git存储库会记住它的来源。但是,如果需要使用git-config,则可以手动设置这些变量。

    1
    git config remote.origin.url <url>

    url是中央存储库的远程路径。

    这是一个应该工作的示例批处理文件(我没有测试过)。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @ECHO off

    :: Retrieve the changes, but don't merge them.
    git fetch

    :: Look at the new changes
    git diff ...origin

    :: Ask if you want to merge the new changes into HEAD
    set /p PULL=Do you wish to pull the changes? (Y/N)
    IF /I %PULL%==Y git pull


    这非常类似于我问的有关如何在git的分支上进行更改的问题。请注意,当使用两个点与三个点时,git diff与git log的行为不一致。但是,对于您的应用程序,您可以使用:

    1
    2
    git fetch
    git diff ...origin

    之后,git pull会将更改合并到您的HEAD中。


    如果将其放到bash配置文件中,则可以运行grin(git远程传入)和grout(git远程传出),以查看原始主机的传入和传出提交的差异。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function parse_git_branch {
      git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
    }
    function gd2 {
     echo branch \($1\) has these commits and \($2\) does not
     git log $2..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
    }
    function grin {
     git fetch origin master
     gd2 FETCH_HEAD $(parse_git_branch)
    }
    function grout {
     git fetch origin master
     gd2 $(parse_git_branch) FETCH_HEAD
    }


    推荐阅读

      linux命令暂停下载?

      linux命令暂停下载?,系统,代码,暂停,第一,服务,管理,命令,进程,程序,接线,lin

      共享盘挂载命令linux?

      共享盘挂载命令linux?,系统,信息,服务,设备,电脑,名字,情况,网络,命令,磁盘,l

      linux管理磁盘命令?

      linux管理磁盘命令?,系统,情况,管理,设备,报告,单位,数据,信息,命令,磁盘,lin

      linux三十个基本命令?

      linux三十个基本命令?,工作,地址,系统,信息,命令,管理,目录,单位,数据,生产,l

      linux查询ip命令?

      linux查询ip命令?,地址,网络,信息,设备,系统,电脑,终端,命令,中心,技术指标,l

      linux命令赋予权限?

      linux命令赋予权限?,系统,密码,档案,权限,数字,地址,用户,文件,命令,目录,详

      linux命令中的花括号?

      linux命令中的花括号?,系统,电脑,密码,命令,地址,代码,工作,管理,终端,文件,l

      夸虚机linux复制命令?

      夸虚机linux复制命令?,系统,工具,项目,电脑,位置,文件,命令,基本知识,源文

      linux命令行输入汉字?

      linux命令行输入汉字?,系统,软件,发行,管理,终端,命令,模式,编辑,文件,文本,L

      linux下编号的命令?

      linux下编号的命令?,工作,系统,信息,命令,状态,地址,工具,目录,软件,基础,在L

      linux命令解压怎么用?

      linux命令解压怎么用?,系统,命令,文件,软件,管理,标准,名称,工具,文件名,目

      linux过滤命令参数?

      linux过滤命令参数?,工具,数据,标准,地址,命令,设备,系统,信息,指令,文件,如

      linux解压常用命令?

      linux解压常用命令?,系统,工具,文件,电脑,命令,平台,手机,格式,目录,文件名,

      linux入侵网站命令?

      linux入侵网站命令?,工作,地址,信息,系统,数字,网站,名称,命令,网络,密码,lin

      linux命令10分类?

      linux命令10分类?,工作,系统,信息,管理,命令,地址,目录,数据,位置,单位,常用

      linux命令创建pkg?

      linux命令创建pkg?,名称,文件,命令,系统,首次,数据,位置,不了,时间,名字,linu

      linux防火墙的命令?

      linux防火墙的命令?,系统,软件,服务,状态,防火墙,命令,代码,密码,公共,管理,l

      linux命令cp中的r?

      linux命令cp中的r?,系统,文件,命令,适当,信息,时间,目录,源文件,文件夹,选项

      linux命令查看命令?

      linux命令查看命令?,系统,地址,信息,情况,工作,命令,标准,工具,文件,内容,lin

      linux命令增加窗口?

      linux命令增加窗口?,系统,环境,工作,位置,地方,时间,终端,首页,密码,图片,lin