11

我在提交正文中有一个旧提交md5hashmyfile.extension不是SOME CHANGE提交标题/元数据)。

如何在导致from的提交中生成SOME CHANGE修改(不仅仅是存在)的提交列表,而无需检查每个差异?(不幸的是,在目前的情况下有很多。)HEADmd5hash

我试过git rev-list --all | xargs git grep 'SOME CHANGE'了,但这似乎找到SOME CHANGE了文件中的所有提交。

git blame似乎没有用,因为线条已经改变并且SOME CHANGE已经移动。

4

3 回答 3

6

我认为您正在寻找的答案是git --no-pager log --pretty="%H" -G"SOME CHANGE" -- myfile.extension

起初我想到了,git log -S但它只涵盖添加/删除。 git log -G可能会接近你想要的。在这里您可以看到 和 之间的区别-S-G并且我还包含了完整的提交历史记录,因此您可以查看未涵盖的内容。阅读提交消息以了解我在正文中所做的操作。

# git --no-pager log --oneline -S"SOME CHANGE"
12e24ed Remove text
9427ffc Add the text
# git --no-pager log --oneline -G"SOME CHANGE"
12e24ed Remove text
6a33653 Change other text on same line
ac09bbb Append other text to same line
484b447 Move the text two lines down
9427ffc Add the text
# git --no-pager log --oneline
12e24ed Remove text
9c7f7d5 Change text on adjacent line
6a33653 Change other text on same line
ac09bbb Append other text to same line
484b447 Move the text two lines down
377936f Add other text on adjacent line
9427ffc Add the text
1929648 Initial commit

只用哈希来获得它:

# git --no-pager log --pretty="%H" -G"SOME CHANGE"
12e24ed749e499bc2d8920c5d8a3ca98a6422e3f
6a336532210ca85dea86968c34cef516345b8ab4
ac09bbb5c95bbea65e7c99c730653d27f90397f4
484b4478e4cb16c839dac558f3e958683b428a64
9427ffc7dd60a3cfb1d9880083e6262faea0eefb
于 2015-11-18T21:27:26.757 回答
1

我认为您正在寻找:

git log -S<string>

寻找改变文件中指定字符串(即添加/删除)出现次数的差异。供脚本编写者使用。

当您正在寻找一个确切的代码块(如结构)并想知道该块自它首次出现以来的历史时,它很有用:迭代地使用该功能将原像中有趣的块反馈回-S,然后继续,直到你得到第一个版本的块。

于 2015-11-18T21:27:06.933 回答
0

这仍然需要对结果进行一些研究,但这可能会让您更接近:

git rev-list --all | xargs git show | egrep '(^ ?[+-].*(SOME CHANGE)|^commit)' | egrep -B1 '^ ?[+-]' | uniq

这显示了每个提交的补丁,显示了它正在查看的 sha,然后吐出匹配的代码行。匹配的相关 sha 在匹配之上。

如果这是一种可行的方法,您可以进一步清理结果。

于 2015-11-18T21:07:19.253 回答