当前位置:  开发笔记 > 前端 > 正文

我如何生成自上次拉出以来改变了什么的git diff?

如何解决《我如何生成自上次拉出以来改变了什么的gitdiff?》经验,为你挑选了3个好方法。

我想将以下操作编写成一个命令:

    获取我的本地git存储库的版本.

    Git拉最新的代码.

    Git diff从我在步骤#1中提取的版本到现在在我的本地存储库中的版本.

换句话说,我想从中央存储库中获取最新的代码,并立即生成自上次拉出以来所发生变化的差异.



1> Lily Ballard..:

您可以使用refspecs相当简单地完成此操作.

git pull origin
git diff @{1}..

这将为你提供当前分支的差异,因为它在拉动之前和之后存在.请注意,如果pull实际上没有更新当前分支,则diff会给出错误的结果.另一种选择是明确记录当前版本:

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

我个人使用一个别名,它只是向我显示一个日志,以相反的顺序(即最旧到最新),sans合并,自我上次拉动后的所有提交.每次我的拉动更新分支时我都会运行它:

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


@ user1129682:这是访问[reflog]的语法(http://www.kernel.org/pub/software/scm/git/docs/git-reflog.html).如果没有分支名称,则表示访问当前分支的reflog.值"@ {1}"表示最新的reflog条目,例如当前分支指向当前提交之前指向的当前分支.
有人可以解释(或告诉我在哪里阅读)什么`@ {1} ..完全测量?把它扔到谷歌没有帮助.
+1,这是正确的方法。您应该在“ @ {1} ..”表示法上稍作扩展,也许将默认值明确地放在此处,然后显示精简版本,所以它的魔力就少了。

2> Greg..:

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

git config remote.origin.url 

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

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

@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



3> Greg Hewgill..:

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

git fetch
git diff ...origin

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


另一种方法是使用特殊的FETCH_HEAD头,它反映了前一次获取的结果.所以:"git fetch && git diff ... FETCH_HEAD".
推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有