如何生成自上次提取以来已更改的内容的 git 差异?

我希望将下列操作编写成一个单独的命令,最好是 rake 格式:

  1. 获取本地 git 存储库的版本。
  2. 拿出最新的代码。
  3. Git 与我在步骤 # 1中提取的版本不同,它现在位于我的本地存储库中。

换句话说,我希望从中央存储库获得最新的代码,并立即生成自上次提取以来发生的更改的差异。

51071 次浏览

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

git fetch
git diff ...origin

之后,一个 git pull将合并到您的头部的变化。

您可以使用 refspecs 相当简单地完成这项工作。

git pull origin
git diff @{1}..

这将给您一个当前分支的差异,因为它在拉之前和之后都存在。请注意,如果拉动实际上没有更新当前分支,diff 将给出错误的结果。另一种选择是显式记录当前版本:

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

我个人使用一个别名,它只是按照从最早到最新的倒序(即从最早到最新)显示一个日志,其中不包括自我上次提交以来的所有提交。每次我的 pull 更新分支时都会运行这个命令:

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

如果你把它放到你的 bash 配置文件中,你就可以运行咧嘴笑(git 远程传入)和灌浆(git 远程传出)来查看提交的差异,这是传入和传出的原始主机。

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
}