2017-08-09 88 views
1

我想弄清楚在哪一點文件中的一行被引入,並在哪些提交它被改變。git log單行-L沒有顯示差異或補丁?

我可以查看那些行(在文件example.txt中第10行)的歷史記錄:

git log -L 10,11:example.txt 

然而,對於每個日誌條目它包括「差異」或「補丁」(I」不敢確定的差別還的),好像我跑:

git log -p 

這使得輸出更難以閱讀 - 我只是想查看提交信息及其ID的列表提交該改變我感興趣的線路

例如,通常使用--pretty格式可以簡化git日誌,使我們能夠通過一系列完整的提交消息來查找我們感興趣的信息。例如,我使用--oneline頻繁選項:

git log --oneline 

然而,它顯示了完整的日誌 - 我們想過濾這個只顯示提交,改變感興趣的線。像下面將是巨大的,但漂亮的ONELINE格式似乎並沒有結合工作與-L標誌:

git log --oneline -L 10,11:example.txt 

我試過的選項和參數的各種組合從git log documentation但沒有發現任何有效的東西。

有沒有其他人面對這個問題或有什麼可以工作的想法?

感謝您閱讀這一步

+0

給出一個基於命令行的答案遠遠超出了我的薪酬等級,但我可以告訴你,大多數具有Git集成的IDE(例如IntelliJ,Eclipse)都可以註釋源文件中的每一行,誰最後觸摸了一條特定線。實際上,我寧願用圖形方式而不是從命令行獲取這些信息。 –

+0

已經找到[此帖子](https:// stackoverflow。com/questions/41427590/git-log-l-without-diff) 這個問題的答案建議使用git log -L命令,並且使用egrep提取提交。不知道現在怎麼... – lemongrassnginger

回答

0

幾個詳細的解決方案是使用普通的Git日誌-L命令輸出的日誌感興趣的線路,然後通過管道將輸出到grep或sed將只打印件你感興趣的提交信息。 試試你喜歡哪個版本。如果有人有一個不太詳細的解決方案,我會很樂意聽到!

的grep:

git log -L 10,11:example.txt | grep 'commit \w' -A 4 

grep命令每個日誌條目的所述第一線和所述打印下一個4行-A標誌

sed的相符:

git log -L 10,11:example.txt | sed -n '/commit/{p;n;n;n;n;p}' 

當它找到匹配時,通過p命令打印該行,通過n跳過下一行命令然後使用p打印下一行。前導-n選項可防止所有其他打印。發現感謝this answer