我怎样才能生成自上次拉动以来发生变化的git diff?

我想脚本,最好在耙子,下面的行动到一个单一的命令:

  1. 获取我的本地git存储库的版本。
  2. Git拉最新的代码。
  3. 从步骤#1中提取的版本Git diff到现在在我的本地资源库中。

换句话说,我想从中央库获取最新的代码,并立即生成自上次拖拉以来改变的内容。

你可以用refspecs简单地做到这一点。

git pull origin git diff @{1}.. 

这会给你当前分支的差异,因为它存在之前和之后的拉。 请注意,如果拉不实际更新当前分支,差异会给你错误的结果。 另一种select是明确logging当前版本:

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

我个人使用一个别名,只是简单地向我显示一个日志,以相反的顺序(即从最旧到最新),无合并,自从我上次拉的所有提交。 我每次拉我更新分支时运行这个:

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

格雷格的方式应该工作(不是我,其他格雷格:P)。 关于你的评论,origin是一个configurationvariables,当你将中央仓库克隆到本地机器时,由Git设置。 基本上,一个Git仓库会记住它来自哪里。 但是,如果您需要使用git-config,则可以手动设置这些variables。

 git config remote.origin.url <url> 

其中url是您的中央存储库的远程path。

这是一个应该工作的示例batch file(我还没有testing过)。

 @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的行为不一致。 但是,对于您的应用程序,您可以使用:

 git fetch git diff ...origin 

之后,一个git pull会将这些变化合并到你的HEAD中。

如果你把它放到你的bashconfiguration文件中,你将能够运行grin(git remote incoming)和grout(git remote outgoing)来查看原始主机的传入和传出提交的差异。

 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 }