搜索git历史的更好方法

搜索git历史的更好方法,git,Git,我经常做git log-p寻找一行代码更改,通常是删除。这打开得更少,然后我会搜索我要找的内容。这确实有效。但是,一旦找到它,我有时会想查看该文件的提交日志,通常是为了确定何时提交。这通常涉及到由于许多文件提交而导致的大量滚动。有没有一种好方法可以停止滚动,直接跳到提交文件?找到命中的文件就是?^diff;然后查找提交头的搜索字符串是?^commit,如果使用的是默认头格式,则带有该尾随空格;如果使用的是?^[a-f0-9]{5},则为--oneline 显然,mercurial有一个diff

我经常做
git log-p
寻找一行代码更改,通常是删除。这打开得更少,然后我会搜索我要找的内容。这确实有效。但是,一旦找到它,我有时会想查看该文件的提交日志,通常是为了确定何时提交。这通常涉及到由于许多文件提交而导致的大量滚动。有没有一种好方法可以停止滚动,直接跳到提交文件?

找到命中的文件就是
?^diff
;然后查找提交头的搜索字符串是
?^commit
,如果使用的是默认头格式,则带有该尾随空格;如果使用的是
?^[a-f0-9]{5}
,则为
--oneline


显然,mercurial有一个diff scraper,可以将点击和元数据压缩成一行,这是为了好玩。

找到点击所在的文件就是
?^diff
;然后查找提交头的搜索字符串是
?^commit
,如果使用的是默认头格式,则带有该尾随空格;如果使用的是
?^[a-f0-9]{5}
,则为
--oneline


显然,mercurial有一个diff scraper,可以将点击和元数据压缩到一行中,这很有趣。

如果您正在寻找删除特定行的提交,有更好的方法

使用git日志:

git日志-S路径/to/file
使用
git责备

git-burn——反向开始..结束文件名

如果您正在查找已删除特定行的提交,则有更好的方法

使用git日志:

git日志-S路径/to/file
使用
git责备

git-burn——反向开始..结束文件名

为什么不使用许多图形前端中的一个?我的最爱:
git extensions
(仅限windows)、
SourceTree
(在windows上很糟糕),
GitKraken
@MarekR在我当前的工作环境中,我不允许安装未经批准的软件。我正在找一份新工作。我不知道是否可以使用源代码树等。那么
gitk
呢?它通常与git一起提供,作为默认的图形前端,因此您可能已经拥有了它。它的UI流很难看,有点奇怪,但它的速度很快。@MarekR可能是的。我只是一个终端机我喜欢
ungit
。这是一种可视化git提交树的好方法。为什么不使用许多图形前端中的一个呢?我的最爱:
git extensions
(仅限windows)、
SourceTree
(在windows上很糟糕),
GitKraken
@MarekR在我当前的工作环境中,我不允许安装未经批准的软件。我正在找一份新工作。我不知道是否可以使用源代码树等。那么
gitk
呢?它通常与git一起提供,作为默认的图形前端,因此您可能已经拥有了它。它的UI流很难看,有点奇怪,但它的速度很快。@MarekR可能是的。我只是一个终端机我喜欢
ungit
。这是一种可视化git提交树的好方法。另外:
git log-G
。虽然
-S
-G
在几个方面有所不同(特别是其中一个默认为简单字符串,另一个默认为正则表达式),但最大的区别在于
-G
查看diff以查看它是否包含某些内容,而
-S
查看diff以查看something的数量是否发生了变化。例如,假设我们有一个diff,它改变了一个单词W的拼写,这个单词位于第二个单词X之前,这个单词要么被添加,要么被删除
git log-sx
将查找差异,因为它添加/删除了X。
git log-gx
也将查找差异。但是
git log-sw
不会,而
git log-gw
会。虽然
-S
-G
在几个方面有所不同(特别是其中一个默认为简单字符串,另一个默认为正则表达式),但最大的区别在于
-G
查看diff以查看它是否包含某些内容,而
-S
查看diff以查看something的数量是否发生了变化。例如,假设我们有一个diff,它改变了一个单词W的拼写,这个单词位于第二个单词X之前,这个单词要么被添加,要么被删除
git log-sx
将查找差异,因为它添加/删除了X。
git log-gx
也将查找差异。但是
git log-sw
不会,而
git log-gw
会。