获取特定修订/分支之间的文件差异

获取特定修订/分支之间的文件差异

我有 2 个不同的分支 A、B,它们具有文件 X 的(略有不同)版本。
我有兴趣获取在分支 B 中添加一些特定模式的提交。
我大致做了什么:diff files| grep "^\+" | grep "$PATTERN" | for loop grep -n.. do git blame -L done
这有效,但我想知道我是否我正在重新发明/迂回寻找 git 中容易支持的东西。
有没有更好的办法?

答案1

我认为你可以结合git blamegit 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在非反向模式下仅显示文件中当前的行,因此结果将仅包括添加或修改的行,这与您的过滤器完全相同^\+

相关内容