我在我的Git存储库中的一个文件中删除了一行。我知道一些缺失的文本,以及它所在的文件,所以我使用了git log -S'missingtext' /path/to/file
。
但是,唯一返回的是提交,在提交中我添加了包含缺失文本的行。文本没有出现在HEAD中,而添加它的提交出现在我的分支中,所以我知道我的分支历史中的某个提交肯定删除了它,但它没有出现。
经过一些手动搜索后,发现该行在解决合并冲突时被意外删除。所以我想知道:
任何关于#1的见解都会很棒(我以为git log -S
会给我答案),但我真正的问题是#2,因为我希望将来能避免这种情况。
发布于 2017-04-18 12:37:34
在超级用户上有一个很好的答案:
git blame --reverse START.. file.ext
对于每一行,这将显示该行所在位置的最后一次提交-比方说哈希0123456789。接下来的下一个提交将是删除它的那个。使用git log
并搜索散列0123456789,然后搜索其后续提交。
发布于 2015-04-07 09:55:02
快速和肮脏的方法#2 -使用for循环。
for commit in $(git log --pretty='%H'); do
git diff -U0 --ignore-space-change "$commit^" "$commit" | grep '^-.*missingtext' > /dev/null && echo "$commit"
done
这将包括所有合并更改,因为它显式地指定了diff的基提交。我想出这个是因为git log -c -S...
给了我一堆假阳性。此外,当我在初始git log
命令中指定文件路径时,它跳过了我正在查找的提交。
由于这可能会运行一段时间,因此您可以在git log
命令上指定-n
,或者如果只需要1个结果,则在循环的末尾放置一个&& break
。
https://stackoverflow.com/questions/12591247
复制相似问题