首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当行被删除/移除时,如何查找提交?

当行被删除/移除时,如何查找提交?
EN

Stack Overflow用户
提问于 2012-09-26 05:22:01
回答 2查看 30.5K关注 0票数 107

我在我的Git存储库中的一个文件中删除了一行。我知道一些缺失的文本,以及它所在的文件,所以我使用了git log -S'missingtext' /path/to/file

但是,唯一返回的是提交,在提交中我添加了包含缺失文本的行。文本没有出现在HEAD中,而添加它的提交出现在我的分支中,所以我知道我的分支历史中的某个提交肯定删除了它,但它没有出现。

经过一些手动搜索后,发现该行在解决合并冲突时被意外删除。所以我想知道:

  1. 这是pickaxe找不到删除该行的提交的原因吗?
  2. 如果不手动挖掘历史记录,我如何才能找到删除"missingtext“的位置?

任何关于#1的见解都会很棒(我以为git log -S会给我答案),但我真正的问题是#2,因为我希望将来能避免这种情况。

EN

回答 2

Stack Overflow用户

发布于 2017-04-18 12:37:34

在超级用户上有一个很好的答案:

代码语言:javascript
复制
git blame --reverse START.. file.ext

对于每一行,这将显示该行所在位置的最后一次提交-比方说哈希0123456789。接下来的下一个提交将是删除它的那个。使用git log并搜索散列0123456789,然后搜索其后续提交。

票数 22
EN

Stack Overflow用户

发布于 2015-04-07 09:55:02

快速和肮脏的方法#2 -使用for循环。

代码语言:javascript
复制
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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12591247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档