Отображать изменения в файле только без сообщений коммита или чего-либо еще - PullRequest
0 голосов
/ 10 июня 2018

Я хочу отображать только изменения в файле и только это, без сообщений коммита или хэшей или чего-либо еще.

Предположим, что мой файл начинается пустым.Затем коммит добавляет одну строку к нему, и файл теперь выглядит следующим образом:

foo

Второй коммит, который удаляет эту строку и добавляет новую,

bar

Третийи последний коммит добавляет еще одну строку

bar
baz

Выходные данные должны быть

+foo
-foo
+bar
+baz

Для моего конкретного случая использования мне просто нужно найти любой контент, который попал в файл (в идеалеfoo должен отображаться один раз);Мне все равно, когда он был добавлен или кем, но любой ответ, который может приблизить меня к этому, приветствуется, и я изменю вывод, чтобы отобразить только то, что мне нужно.

1 Ответ

0 голосов
/ 10 июня 2018

Учитывая этот репозиторий:

$ 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, которая делаеттрюк.Однако, предполагая, что вас не интересуют контекстные строки, использование grep для пост-обработки вывода делает свое дело.

Идея состоит в том, чтобы фильтровать выходные данные, оставляя только строки изменения (т.е. начинается с + или -), а затем отфильтруйте легенду до / после (т. е. --- a/test.txt и +++ b/test.txt).Конечно, это может оказаться проблематичным, если в файле (ах) есть содержимое, в котором есть строки, начинающиеся с ++.

...