问题
I'm trying to use git log -L <start>,<end>:<filename>
but I would like to have very limited output (actually just hashes). While --pretty prints the commit info in the format I want, I did not find a way to not display the diff...
e.g. on linux-next what I tried is:
git log --pretty=format:"%H" -s -L 70,70:./arch/x86/include/asm/irqflags.h
where (according to the manpage) the -s is supposed to Supress the ouput of the diff, however the output is:
$ git log --pretty=format:"%H" -s -L 70,70:./arch/x86/include/asm/irqflags.h
6abcd98ffafbff81f0bfd7ee1d129e634af13245
diff --git a/include/asm-x86/irqflags.h b/include/asm-x86/irqflags.h
--- a/include/asm-x86/irqflags.h
+++ b/include/asm-x86/irqflags.h
@@ -1,2 +64,1 @@
-#ifdef CONFIG_X86_32
-# include "irqflags_32.h"
+{
96a388de5dc53a8b234b3fd41f3ae2cedc9ffd42
diff --git a/include/asm-x86/irqflags.h b/include/asm-x86/irqflags.h
--- /dev/null
+++ b/include/asm-x86/irqflags.h
@@ -0,0 +1,2 @@
+#ifdef CONFIG_X86_32
+# include "irqflags_32.h"
I am using git version 2.10.2
回答1:
The -L
option is not currently (and apparently never was) compatible with -s
/ --no-patch
, because of this code called from line_log_print, called from the top of log_tree_commit when -L
is in effect. Said code simply outputs the entire chosen line-range from any matched commit. (You could patch the hack to obey the diff output options, perhaps.)
(The other obvious workaround would be to use git rev-list
instead of git log
, except that -L
is, as that first link notes, not properly integrated in the first place, so that git rev-list
does not handle it.)
回答2:
That will be clearer with Git 2.22 (Q2 2019).
"git log -L<from>,<to>:<path>
" with "-s
" did not suppress the patch
output as it should.
This has been corrected.
See commit 05314ef (11 Mar 2019), and commit 9f607cd (07 Mar 2019) by Jeff King (peff).
(Merged by Junio C Hamano -- gitster -- in commit 31df2c1, 09 Apr 2019)
line-log
: detect unsupported formatsIf you use "
log -L
" with an output format like "--raw
" or "--stat
", we'll silently ignore the format and just output the normal patch.
Let's detect and complain about this, which at least tells the user what's going on.
It will now clearly display:
-L does not yet support diff formats besides -p and -s
回答3:
one grep solution is to pipe the output to grep to only print lines matching a commit:
git log -L 10,11:example.txt | grep 'commit \w' -A 4
grep matches the first line of each log entry and the prints the next 4 lines with the -A flag
It's a bit verbose though. Would love to hear if anyone has a better solution!
来源:https://stackoverflow.com/questions/41427590/git-log-l-without-diff