我有 2 个不同的分支 A、B,它们具有文件 X 的(略有不同)版本。
我有兴趣获取在分支 B 中添加一些特定模式的提交。
我大致做了什么:diff files| grep "^\+" | grep "$PATTERN" | for loop grep -n.. do git blame -L done
这有效,但我想知道我是否我正在重新发明/迂回寻找 git 中容易支持的东西。
有没有更好的办法?
答案1
我认为你可以结合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
在非反向模式下仅显示文件中当前的行,因此结果将仅包括添加或修改的行,这与您的过滤器完全相同^\+
。