显示传入 git 提交中更改了哪些文件



我想看看在获取新提交后触摸了哪些文件。我希望它与合并后看到的文件相同:文件列表,带有"x 次"+(用于插入的行(和"y 次" - (用于删除的行(。

我试过:

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

但:

  1. 它向我展示了一个接一个的提交 - 而我想查看整个触摸的文件集,就好像只有一个大提交一样

  2. 它不会停止在我已经在我的机器上拥有的旧提交。

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

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

git diff --stat master origin/master

如果您的本地分支及其上游对应项始终遵循相同的模式(例如 fooorigin/foo (,然后将一个小的 shell 函数写入别名应该可以工作 - 在你的.gitconfig中是这样的:

[alias]
upstreamdiff = "!f(){ git diff --stat ${1} origin/${1} }; f"

如果您有未命名为 origin 的远程数据库,或者如果您没有使用匹配分支名称的习惯,则它变得更加复杂,您可能需要一个完整的 shell 脚本来获取分支,找到它的上游伙伴,然后运行相应的 git diff 命令。

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

alias
upstreamdiff = "!f() { b=$(git symbolic-ref --short HEAD); git diff --stat ${b} origin/${b} }; f"

你问

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

如果您在不执行mergerebase的情况下多次获取,那么从分支merge-base到上游的差异将为您提供所有这些获取的总和,而不仅仅是最近的获取。 我发现两者兼而有之很有用 - 我将其中一个别名为 unmerged,另一个别名为 whatfetched.

此外,git 提供了内置功能来识别您的上游,即使您正在跟踪的分支没有相同的名称,该功能也可以工作,这是通过特殊的 ref @{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)

最新更新