2011-05-05 60 views
13

我希望看到所有git提交影響了我的一個文件中的當前行x-y。有沒有辦法可以做到這一點?git log文件的一部分

+0

爲什麼要這麼做? – 2011-05-05 14:00:05

+2

我有一些沒有任何意義的代碼。我想看看它是如何在目前的狀態下結束的。這個文件有很多提交,其中大部分都不會觸及相關的行。我不想通過500次提交來找到這4件事。 – JonDrnek 2011-05-05 14:03:35

+0

這是一個有趣的問題,我本人會問這個問題,但我意識到在上下文中沒有明確的方式來定義「行」。在文件瀏覽/編輯的上下文中,一行由其行號定義。但是一旦一個文件有n行添加到其中,那麼之後的每一行都會變成行x + n,並且你的日誌不再出現亂碼。在歷史中可能有一種明智的方式來回顧歷史,但我認爲它會是相當計算密集型的。 – naught101 2013-04-30 01:21:50

回答

11

現在git log支持-L選項像git blame。這是在Git v1.8.4中添加的。

-L <start>,<end>:<file> 
-L :<regex>:<file> 

Trace the evolution of the line range given by "<start>,<end>" (or 
the funcname regex <regex>) within the <file>. You may not give any 
pathspec limiters. This is currently limited to a walk starting from a 
single revision, i.e., you may only give zero or one positive revision 
arguments. You can specify this option more than once. 

git-log documentation

0

並非真的是您的問題的答案,但您可以使用git blame <file>並詢問寫下打擾您的行的人。

5

您可以使用git blame與-l選項:

-L <start>,<end> 

Annotate only the given line range. <start> and <end> can take one of these forms: 

number 

If <start> or <end> is a number, it specifies an absolute line number (lines count from 1). 

/regex/ 

This form will use the first line matching the given POSIX regex. If <end> is a regex, it will search starting at the line given by <start>. 

+offset or -offset 

This is only valid for <end> and will specify a number of lines before or after the line given by <start>. 

因此,這將是類似如下:

git blame -L 40,60 foobar 

需要注意的是git的怪顯示每行的最新版本。你也可以嘗試用--reverse選項:

--reverse

城歷史前進,而不是 落後。 此處顯示 線條已存在的最後一個修訂版本,而不是顯示 版本。這需要一個 修訂版本範圍,如START..END ,其中責任路徑存在於 START中。

http://www.kernel.org/pub/software/scm/git/docs/git-blame.html

可以或許還可以使用

gitk foobar 
+2

儘管這隻顯示了一個變化..我想我們正在尋找類似git-log的東西,但是對於某個線路範圍。 – 2011-12-02 17:54:59