Git-获取合并回的分支中更改的文件列表

Git-获取合并回的分支中更改的文件列表,git,Git,假设我从master创建了一个分支,如下所示: git checkout -b changes 现在我提交两个更改: touch filea && git add filea && git commit -m "added file a" touch fileb && git add fileb && git commit -m "added file b" 现在,我可以通过多种方式获得该分支中更改的文件列表,如: git lo

假设我从master创建了一个分支,如下所示:

git checkout -b changes
现在我提交两个更改:

touch filea && git add filea && git commit -m "added file a"
touch fileb && git add fileb && git commit -m "added file b"
现在,我可以通过多种方式获得该分支中更改的文件列表,如:

git log master..changes --name-only --pretty=format: --
到目前为止,一切都很好,但是当我将更改合并回来时:

git checkout master && git merge changes
上面的log命令不再有效。如果我仅有的信息是分支机构名称,有没有办法自动获取已更改文件的列表


编辑:我想我应该解释一下我所说的“自动方式”是什么意思:我运行一个脚本,该脚本得到一个分支名称作为参数,其他什么都没有。我不知道分支是否已经合并为master。我不知道这是否很快——所有这些都是可能的,而且这种方法应该适用于所有这些情况。它应该获得分支的名称并输出该分支中更改的所有文件。不必是一行,但越简单越好。

master..changes
这样的修订范围意味着所有可以从
更改中访问的提交,不包括那些可以从
master
中访问的提交。将
更改
合并到
主控
后,可以从
更改
访问的所有提交现在也可以从
主控
访问。所以现在,
git log master..changes
不输出任何内容

在您的情况下,可以在合并后运行
git log master^..changes
,以获得所需的内容。到目前为止,这还可以,但由于我不知道您下一步会做什么,所以我不能给出更多的建议作为通用解决方案


更新:您想知道更改的文件,从何时开始?如果总是最后一次运行脚本,那么每次运行脚本时都可以添加一个轻量级标记。也许您可以添加另一个参数,告知这次是否要添加标记。此参数可能有助于测试。
git descripe--tags changes
可以找到
changes
的最新标记。如果可以找到标记,则可以运行
git log..changes
以查找自上次运行以来的所有更改。然后你可以在
的头部添加一个新的标签,这样下次它从这里开始。但这仍然不是一个通用的解决方案,因为您的需求不够明确

如果您记录了合并,或者如果合并是在上个月左右的回购中完成的,那么这很容易

对于录制的(非“快进”)合并

将从分支提示中获取合并,所以

mastermerge=`git rev-list --first-parent --merges --ancestry-path branch..master|tail -1` \
&& git diff $mastermerge^1..$mastermerge^2
在那里工作


如果您在本地repo中进行了快进合并,reflog将向您显示do
git reflog master
,找到
merge branch:Fast forward
条目,并将该合并的前后提交指定为“父项”。

问题是,主控^..更改在我合并之前不起作用,即使在合并之后,它也不适用于快进合并。@Cezz:快进“合并”根本不是合并,因此不会留下任何记录(除了最终过期的重新登录)。这是一些工作流禁止(某些)快进操作的原因之一。这一点越来越近了。我更新了这个问题,解释了我想要得到什么。我在这里看到的问题是,我不确定最后一次合并是否是“我的”合并。这是没有保证的——是的,这可能是几个月前的事了。事实上,它可能根本不会被合并。但是如果我能以某种方式检测到,我可以做
git log master..branch
的事情。几乎分支引用的全部要点是它们是临时的,并且是本地的。这件事很重要。
mastermerge=`git rev-list --first-parent --merges --ancestry-path branch..master|tail -1` \
&& git diff $mastermerge^1..$mastermerge^2