在文件中移动/删除的Git跟踪代码块

在文件中移动/删除的Git跟踪代码块,git,git-log,git-blame,Git,Git Log,Git Blame,我在myfile.extension上有一个旧的commitmd5hash,commit body(而不是commit title/metadata)中有一些更改 如何从md5hash生成提交列表,并在提交中修改某些更改(而不仅仅是当前更改),而不必检查每个差异?(不幸的是,在目前的案例中,有许多这样的例子。) 我尝试了git rev list--all | xargs git grep'SOME CHANGE'但这似乎找到了文件中包含SOME CHANGE的所有提交 git bull似乎没有用

我在
myfile.extension
上有一个旧的commit
md5hash
,commit body(而不是commit title/metadata)中有一些更改

如何从
md5hash
生成提交列表,并在提交中修改
某些更改(而不仅仅是当前更改),而不必检查每个差异?(不幸的是,在目前的案例中,有许多这样的例子。)

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


git bull
似乎没有用,因为行已经更改,并且
一些更改已经移动。

这仍然需要对结果进行一点涉水,但这可能会让您更接近:

git rev-list --all | xargs git show | egrep '(^ ?[+-].*(SOME CHANGE)|^commit)' | egrep -B1 '^ ?[+-]' | uniq
这将显示每个提交的补丁,显示它正在查看的sha,然后显示匹配的代码行。比赛的相关sha高于比赛


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

我认为您正在寻找:

git log -S<string>
git日志-S
查找更改文件中指定字符串(即添加/删除)出现次数的差异。供编剧使用

当您正在寻找一个精确的代码块(如结构)并想知道该块自诞生以来的历史时,它非常有用:迭代地使用该功能将前映像中感兴趣的块反馈回-S,并一直执行,直到获得该块的第一个版本


我想你要找的答案是
git--没有寻呼机日志--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