1

语境:

通常在调查问题时,我会引入调试语句(与解决方案隔离,在他们自己的提交中),然后一旦我有解决方案,我将删除所有这些调试语句。然而,有时,在查看差异或责备时,不清楚在调试中引入了哪些更改以及哪些更改是作为解决方案的一部分。在这种情况下,我想确定,对于任何特定的提交或一组提交,哪些行(如果有)在该提交中发生了更改,并且以后不再更改。这样我可以确定所有调试更改都已正确还原。

通常,我会简单地通过 git 还原提交,但特别是当在解决方案上花费很长时间,在修复和调试之间交替时,可能会有代码更改提交删除在调试中引入的行,这很git revert重要。

概括:

我想查看存储库中任何文件中的任何行,这些行将标有git blame. 也就是说,任何被给定提交触及并且此后未更改的行。目前,我的工作流程如下:

git log
#record short hashes of the commits i'm interested in

对于每个哈希:

git show --name-only $hash
#record files affected

对于每个文件:

git blame -- "$file" | grep $hash
4

2 回答 2

0

我已经制作了一个相当复杂的命令,使用xargsandgrep并将命令串在一起git,但这似乎有点过头了,我希望有一种方法可以做到这一点,主要是委托给 git。

这接受一个缩写哈希列表作为它的参数:

RE="`echo "$*" | sed 's: :\\|:g'`"
git show --pretty=format: --name-only "$@"
    | sed '/^$/d'
    | sort
    | uniq
    | xargs -l git blame --
    | grep "$RE"

但是,如果有任何受影响的行,它不会告诉您它们来自哪个文件。
如果给定一个完整的哈希,它也找不到受影响的行:需要提供缩写。

于 2018-07-19T06:32:46.760 回答
0

我觉得git diff HEAD [Commit before first debug change]应该做。

您可以在文本编辑器中查看结果并搜索调试更改。如果你发现任何它还没有被删除。

于 2018-07-19T09:06:40.437 回答