Jim Asked: 2018-06-08 14:03:03 +0800 CST2018-06-08 14:03:03 +0800 CST 2018-06-08 14:03:03 +0800 CST 获取特定修订/分支之间的文件差异 772 我有 2 个不同的分支 A、B,它们具有文件 X 的(略有不同)版本。 我有兴趣获取在分支 B 中添加一些特定模式的提交。 我大致做的是:diff files| grep "^\+" | grep "$PATTERN" | for loop grep -n.. do git blame -L done 这有效,但我想知道我是否我正在重新发明/绕过 git 很容易支持的东西。 有没有更好的办法? grep git 1 个回答 Voted Best Answer Stephen Kitt 2018-06-08T14:25:43+08:002018-06-08T14:25:43+08:00 我认为你可以结合git blame并git merge-base获得你所追求的信息: git blame -n $(git merge-base A B).. -- file | grep -v "^^" | grep "$PATTERN" 这会找到 A 和 B 之间的共同祖先,然后在git blame上运行file,忽略任何比共同祖先更早的东西(..符号告诉git blame我们查看从祖先开始到当前头部结束的修订)。-n在输出中添加行号。然后grep -v "^^"删除自共同祖先以来未更改的任何行,最后grep "$PATTERN"仅在已更改的行中查找模式。由于git blame在非反向模式下仅显示文件中当前的行,因此结果将仅包括添加或修改的行,这与您的^\+过滤器完全相同。
我认为你可以结合
git blame
并git merge-base
获得你所追求的信息:这会找到 A 和 B 之间的共同祖先,然后在
git blame
上运行file
,忽略任何比共同祖先更早的东西(..
符号告诉git blame
我们查看从祖先开始到当前头部结束的修订)。-n
在输出中添加行号。然后grep -v "^^"
删除自共同祖先以来未更改的任何行,最后grep "$PATTERN"
仅在已更改的行中查找模式。由于git blame
在非反向模式下仅显示文件中当前的行,因此结果将仅包括添加或修改的行,这与您的^\+
过滤器完全相同。