2011-03-03 61 views
8

案例
很多時候我發現自己盯着一些看起來不正確的舊代碼。它看起來像已經被刪除了(例如它有一個沒有任何價值的循環,或者它創建了一個變量但不使用它),或者某個東西很難理解這個點。在這些情況下,我真的需要查看該文件的該部分的歷史記錄。不是所有的文件,只是該部分或功能。查找與文件的某個部分相關的git提交

的理想解決方案
一個簡單的命令像

git log books.cpp:10 

找到10號線(可能與環境)文件books.cpp的歷史大概是太魔術索要,但你有沒有如何制定這個歷史的想法?

我已經試過
我一直在使用嘗試,然後檢查出在提交前給出該行的承諾 - 重複它,直到我已經看夠了。但這是非常乏味的工作。

您是否覺得需要此功能?你有辦法實現它嗎?分享你的經驗!

+1

看起來像git blame有強大的選項來查看增量輸出和指定文件的範圍,你有沒有進入man page? – CharlesB 2011-03-03 09:13:31

+0

你有沒有調整這個選項「git blame --incremental -n filename」 – 2011-03-03 09:18:20

回答

4

Git非常容易擴展。像這樣的東西能達到你想要的嗎?

#!/bin/bash 

FILENAME=$1 
LINENUMBERS=$2 

for hash in `git log --pretty=format:%h ${FILENAME}` 
do 
    echo "***************** Showing ${FILENAME} at ${hash}" 
    git blame -L ${LINENUMBERS} ${hash} ${FILENAME} 
done 

將這個小腳本在您的路徑,就像這樣git-linehistory並調用它像這樣:

git linehistory books.cpp 5,15 

它會告訴你什麼線5到15的樣子,在每次提交該文件。

2
  • git blame -L選項讓你指定一個輸出行的範圍,甚至是一個正則表達式來匹配你想要的功能。
  • 你也可以指定責怪在一個特定的提交,那麼你不必在責備之前簽出修訂。

因此,總之,您可以連續調用git blame -L range <commit> <file-name>來瀏覽逐行更改的歷史記錄。