仅显示文件中的更改,无需提交消息或其他任何内容

时间:2018-06-09 23:58:07

标签: git logging diff

我想只显示文件中的更改,而不显示提交消息或哈希或其他任何内容。

假设我的文件开始为空。然后一个提交为它添加一行,文件现在看起来像这个

foo

删除该行并添加新行的第二个提交

bar

第三次和最后一次提交添加了另一行

bar
baz

输出应为

+foo
-foo
+bar
+baz

对于我的特定用例,我只需找到任何使其成为文件的内容(理想情况下foo应该显示一次);我不在乎它何时被添加或由谁,但任何可以让我接近这个的答案都很受欢迎,我会修改输出以显示我需要的内容。

1 个答案:

答案 0 :(得分:0)

鉴于此存储库:

$ git log -p | grep -v Author
commit 3841ace5539820cf8a45edd7033bdd4e5edf3ab2
Date:   Sat Jun 9 18:22:15 2018 -0700

    Add baz to test.txt

diff --git a/test.txt b/test.txt
index 5716ca5..e2994c5 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
 bar
+baz

commit df9de6c79d2374741792b9e5762468f83ab857b8
Date:   Sat Jun 9 18:21:58 2018 -0700

    Remove foo add bar to test.txt

diff --git a/test.txt b/test.txt
index 257cc56..5716ca5 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1 @@
-foo
+bar

commit 74c1beb71d08020635f39edd80dff15ce279742e
Date:   Sat Jun 9 18:21:21 2018 -0700

    Add foo to test.txt

diff --git a/test.txt b/test.txt
index e69de29..257cc56 100644
--- a/test.txt
+++ b/test.txt
@@ -0,0 +1 @@
+foo

commit a970fd59229f791f2f3a7be97014843e55b651d3
Date:   Sat Jun 9 18:20:58 2018 -0700

    Add test.txt

diff --git a/test.txt b/test.txt
new file mode 100644
index 0000000..e69de29

此命令生成您正在寻找的输出:

$ git log -p --reverse --unified=0 --pretty=format: test.txt \
   | grep ^[+-] \
   | grep -vE '^[+-]{3}'
+foo
-foo
+bar
+baz

我无法找到一个纯粹的git log命令来完成这个伎俩。但是,假设您对上下文行不感兴趣,使用grep对输出进行后期处理就可以了。

我们的想法是过滤输出,只留下更改行(即以+-开头),然后过滤出前/后图例(即--- a/test.txt和{{ 1}})。当然,如果文件中的内容以+++ b/test.txt开头,则可能会出现问题。