显示传入的git提交中更改的文件

时间:2014-12-04 18:56:20

标签: git logging

我想知道在获取新提交后触摸了哪些文件。我希望它与您在合并后看到文件的方式相同:文件列表,“x次”+(插入行)和“y次” - (删除行)。

我试过了:

git log --pretty=format:'%h %d %s %an %ar' --date=short --stat HEAD..origin

但:

  1. 它显示我一个接一个地提交 - 而我希望看到整个触摸文件集,好像只有一个大提交

  2. 它不会停留在我已经在我的机器上的旧提交中。

  3. 所以,这里的目标实际上是一目了然:如果我合并所有新提交,哪些文件被传入的提交更改?

2 个答案:

答案 0 :(得分:2)

获取所需报告类型的正确方法是使用git diff。例如:

git diff --stat master origin/master

如果您的本地分支机构及其上游分支机构始终遵循相同的模式(例如fooorigin/foo),那么将一个小的shell函数写入别名应该有效 - 在{{{{ 1}}:

.gitconfig

如果您的遥控器名为[alias] upstreamdiff = "!f(){ git diff --stat ${1} origin/${1} }; f" ,或者您不习惯使用匹配的分支名称,则会变得更加复杂,您可能需要一个完整的shell脚本来找到它的上游伙伴,然后运行相应的origin命令。

编辑:合并自动分支确定:

git diff

答案 1 :(得分:1)

你问

  

查看提取后触摸了哪些文件

如果您在不执行mergerebase的情况下多次获取,则从您的分支的merge-base区分到上游将为您提供所有这些提取的总和,以及不只是最近的最近一次获取。我觉得同时使用它们很有用 - 我将其中一个别名改为unmerged而另一个改为whatfetched

此外,git提供内置功能来识别您的上游即使您正在跟踪的分支没有相同的名称也能正常工作,这是通过特殊引用@{u}

因此,您需要检查

git rev-parse @{u}

这将告诉您分支机构是否有上游。

要获取上游的名称,可以使用

 git rev-parse --abbrev-ref --symbolic-full-name @{u}

这将打印我们的origin/$BRANCH,即使您的分支正在跟踪具有不同名称的分支,也会有效。将其分配给$ UPSTREAM

因此,仅查看最近的提取(whatfetched),您将使用reflog仅显示上游当前指向的位置与之前指向的位置之间的更改。

git diff --stat $(UPSTREAM) ^$(UPSTREAM)@{1}

如果你想看看你在这里看到的是什么,你可以使用像

这样的东西
git reflog ${UPSTREAM}@{now} -2

要查看您尚未合并的所有更改的总和(unmerged),您可能希望从您的分支的merge-base和上游到

git diff --stat HEAD...$(UPSTREAM)