这是我过去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)
Mar*_*air 10
如果您知道某些子字符串将在已删除的行中,那么您可以使用该-G选项git log来查找引入添加或删除包含该子字符串的行的更改的提交.例如,如果你知道"大流行"这个词在消失的那一行,你可以这样做:
git log -Gpandemic -p
Run Code Online (Sandbox Code Playgroud)
(参数-G可以是正则表达式.)这个选项最近被添加到git中 - 如果它不起作用,请尝试-S相反,它具有稍微不同的语义,但应具有类似的效果.