Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谁删除了我在git中的更改?_Git_Revision - Fatal编程技术网

谁删除了我在git中的更改?

谁删除了我在git中的更改?,git,revision,Git,Revision,这是我过去30分钟的问题:我的一个文件中消失了一些更改,我不知道这是什么时候发生的。我想知道是谁干的 我开始寻找包含我的文件的修订版本: git grep <searched_string> $(git rev-list --all) -- <file> git grep$(git rev list--all) 文件的路径或类似于*.gsp的通配符 我做了一系列的修改,我看了最后一个,并试图得到它的子版本(认为第一个子版本应该是第一个修改,我的修改消失了) git版本

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

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

git grep <searched_string> $(git rev-list --all) -- <file>
git grep$(git rev list--all)
文件的路径或类似于*.gsp的通配符

我做了一系列的修改,我看了最后一个,并试图得到它的子版本(认为第一个子版本应该是第一个修改,我的修改消失了)

git版本列表--子版本
是上一个命令最后一行开头的40个字符

接近!我正在查看输出的开头,并获取第一个子项,然后运行

git log <revision_id_s_first_child> --stat
git日志--stat
然后我查看输出,找到我的文件以及谁做了更改! (事实证明,我是罪魁祸首……)


有没有更快的方法(git Dull不会显示已删除的内容)?

如果您知道某个子字符串将位于已删除的行中,那么您可以使用
-G
选项
git log
来查找引入更改的提交,该更改添加或删除了包含该子字符串的行。e、 g.如果你知道“流行病”一词出现在消失的那一行,你可以:

git log -Gpandemic -p

-G
的参数可以是正则表达式。)此选项是最近添加到git的-如果不起作用,请尝试
-S
,它的语义稍有不同,但是应该有类似的效果。

git-dull
有一个
--reverse
选项,它接受一系列提交,并显示删除前存在的行的最后一次提交。因此,如果您发现一个提交,您知道行在那里,比如说
abcdef01
,要显示删除之前的最后一次提交,请执行以下操作:

git blame --reverse abcdef01..HEAD -- <file>
git怪罪——反向abcdef01..HEAD--
请注意,自Git 2.11(2016年第4季度)以来,如果要查看特定提交和当前提交之间的提交,则无需指定
.HEAD

因此,我们应该:

 git blame --reverse abcdef01 -- <file>
向前走而不是向后走。
这显示的不是出现行的版本,而是存在行的最后一个版本。
这需要一系列的修订,如
START..END
,其中
START
中存在错误路径
git-burn--reverse START
被视为
git-burn--reverse START..HEAD
为方便起见

(注释的注释:)

git-burn--reverse可以让您接近删除行的位置。但它实际上并不指向删除该行的修订。它指向上一次修订,该行是当前的。然后,如果下面的修订是一个普通提交,那么您很幸运,您得到了删除修订。OTOH,如果下面的修订是合并提交,那么事情可能会变得有点疯狂。作为创建difflame工作的一部分,我解决了这个问题,因此,如果您的机器上已经安装了python,并且您愿意尝试一下,那么不要再等待,让我知道它是如何运行的


你试过“鹤嘴锄”吗,
git log-S
?可能的-G副本似乎对我不起作用-S将在添加时向我显示,而不是在删除时向我显示
-S
应显示添加或删除的时间(请参阅)。然而,
-S
做这件事有点奇怪-它会查看提交前版本和提交中字符串的出现次数-因此,如果您刚刚移动了一行,例如,它将不会被检测到。这就是为什么
-G
通常更可取的原因,但这只是在git版本1.7.4中引入的。我们得到了1.7.3.4。无论如何,谢谢你的反馈,非常有趣。尽管我搜索的字符串在下一个修订版中根本不存在,但仍然无法看到何时使用-S删除了我的更改。您可能需要
-c
-cc
来显示合并期间的删除(冲突)。看到了吧,
git-gui-bull
不支持
--reverse
,这真是太遗憾了!这里告诉我什么-
9597c8db(XYZ 2014-05-27 10:18:51-0700 93)8e4dbc16(XYZ 2014-05-06 19:08:29+0100 94)1b4dbc16(XYZ 2014-05-06 19:08:29+0100 95)
-700和+100这是什么意思?这些是时区偏移-0700可能是美国西部,比格林尼治标准时间晚7小时。+0100可能是欧洲,比格林尼治标准时间早1小时。事实上,
--reverse
显示了“删除前存在行的最后一次提交”。不过,该提交可能与正在考虑的文件无关。实际上是下一次提交删除了该行:请参阅以查找下一次提交。有人知道是否有可能让git责怪反向显示每行的相关提交,而不是默认显示的不相关提交吗?@kasuniyambalapitiya还不确定:你可以问一个新问题。
 git blame --reverse abcdef01 -- <file>
--reverse <rev>..<rev>: