谁删除了我的git变化?

sta*_*p75 18 git revision

这是我过去30分钟的问题:我的一个文件中有一些更改消失了,我不知道发生了什么.我想知道是谁做的!

我开始寻找包含我的文件的修订版:

git grep <searched_string> $(git rev-list --all) -- <file>
Run Code Online (Sandbox Code Playgroud)

是文件的路径或*.gsp之类的通配符

我得到了一些修改,我看了最后一个,并尝试得到它的孩子(认为第一个孩子应该是我的变化消失的第一个修订)

git rev-list --children <revision_id>
Run Code Online (Sandbox Code Playgroud)

是从前一个命令的最后一行开始的40个字符

越来越接近!我正在查看输出的开头,然后选择第一个子项然后运行

git log <revision_id_s_first_child> --stat
Run Code Online (Sandbox Code Playgroud)

然后我查看输出并找到我的文件,谁做了更改!(原来,我应该责怪......)

反正有没有更快地做到这一点(git责备不会显示已删除的内容)?

Kar*_*ldt 28

git blame有一个--reverse选项,它接受一系列提交,并显示最后一次提交,在删除之前存在一行.所以,你找到一个提交,你知道线条在那里,比方说abcdef01,并在删除前显示最后一次提交,执行:

git blame --reverse abcdef01..HEAD -- <file>
Run Code Online (Sandbox Code Playgroud)

  • 实际上`--reverse`显示"在删除之前存在一条线的最后一次提交".该提交可能与正在考虑的文件无关.这是实际删除该行的下一个提交:请参阅http://stackoverflow.com/a/9870218/2097以查找此下一个提交.有没有人知道是否有可能让`git blame --reverse`显示每行的相关提交,而不是默认显示的无关提交? (6认同)

Mar*_*air 10

如果您知道某些子字符串将在已删除的行中,那么您可以使用该-G选项git log来查找引入添加或删除包含该子字符串的行的更改的提交.例如,如果你知道"大流行"这个词在消失的那一行,你可以这样做:

git log -Gpandemic -p
Run Code Online (Sandbox Code Playgroud)

(参数-G可以是正则表达式.)这个选项最近被添加到git中 - 如果它不起作用,请尝试-S相反,它具有稍微不同的语义,但应具有类似的效果.