Це питання вимагає "номерів рядків", якщо ви не переймаєтесь номерами рядків у висновку, дивіться це запитання та відповідь .
В основному, я не хочу бачити змінений вміст, лише назви файлів та номери рядків.
Це питання вимагає "номерів рядків", якщо ви не переймаєтесь номерами рядків у висновку, дивіться це запитання та відповідь .
В основному, я не хочу бачити змінений вміст, лише назви файлів та номери рядків.
Відповіді:
Примітка: якщо ви просто шукаєте імена змінених файлів ( без з номерами рядків для рядків , які були змінені), що це легко, натисніть на це посилання на інший відповідь тут .
Там немає вбудованої опції для цього (і я не думаю , що це все , що корисно або), але це можна зробити в мерзотник, за допомогою «зовнішнього дифф» сценарій.
Ось досить хитрий; Ви будете вирішувати виводити так, як вам це хотілося.
#! /bin/sh
#
# run this with:
# GIT_EXTERNAL_DIFF=<name of script> git diff ...
#
case $# in
1) "unmerged file $@, can't show you line numbers"; exit 1;;
7) ;;
*) echo "I don't know what to do, help!"; exit 1;;
esac
path=$1
old_file=$2
old_hex=$3
old_mode=$4
new_file=$5
new_hex=$6
new_mode=$7
printf '%s: ' $path
diff $old_file $new_file | grep -v '^[<>-]'
Детальніше про "зовнішню різницю" див. Опис GIT_EXTERNAL_DIFF
на сторінці посібника з git (близько рядка 700, досить близько до кінця).
| grep -o '^[0-9]*'
дає просто цифри, якщо ви не переймаєтесь правою стороною.
--diff-filter=...
там, де ...
частина - тип змін, який ви хочете бачити: M
для модифікованих, A
доданих, D
видалених та інших в git diff
документації.
Так легко:
git diff --name-only
Іди і різнися!
git diff --name-only master..HEAD
Номери рядків, як у кількості змінених рядків, чи фактичні номери рядків, що містять зміни? Якщо ви хочете кількість змінених ліній, використовуйте git diff --stat
. Це дає вам такий показ:
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
Немає можливості отримати номери рядків самих змін.
git diff master --compact-summary
Вихід:
src/app/components/common/sidebar/toolbar/toolbar.component.html | 2 +-
src/app/components/common/sidebar/toolbar/toolbar.component.scss | 2 --
Це саме те, що вам потрібно. Той самий формат, що і під час здійснення зобов’язань або витягування нових комітетів з віддаленого пункту.
PS: Це провід, що ніхто так не відповів.
1) Мій улюблений:
git diff --name-status
Передбачає стан файлу, наприклад:
A new_file.txt
M modified_file.txt
D deleted_file.txt
2) Якщо ви хочете статистика, то:
git diff --stat
покаже щось на кшталт:
new_file.txt | 50 +
modified_file.txt | 100 +-
deleted_file | 40 -
3) Нарешті, якщо ви дійсно хочете лише імена файлів:
git diff --name-only
Буде просто показано:
new_file.txt
modified_file.txt
deleted_file
Показує назви файлів та кількість / номер рядків, які змінювались у кожному файлі між тепер і вказаною комісією:
git diff --stat <commit-hash>
Я знаю, що це старе питання, але в Windows це фільтрує вихід git до файлів та змінює номери рядків:
(git diff -p --stat) | findstr "@@ --git"
diff --git a/dir1/dir2/file.cpp b/dir1/dir2/file.cpp
@@ -47,6 +47,7 @@ <some function name>
@@ -97,7 +98,7 @@ <another functon name>
Щоб витягнути з цього файли та змінені рядки, це трохи більше роботи:
for /f "tokens=3,4* delims=-+ " %f in ('^(git diff -p --stat .^) ^| findstr ^"@@ --git^"') do @echo %f
a/dir1/dir2/file.cpp
47,7
98,7
Увімкнено git version 2.17.1
, для досягнення цієї мети немає вбудованого прапора .
Ось приклад команди для фільтрації імені файлів та номерів рядків з уніфікованого розрізника:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
Наприклад, уніфікований розл .:
$ git diff --unified=0
diff --cc foobar
index b436f31,df63c58..0000000
--- a/foobar
+++ b/foobar
@@@ -1,2 -1,2 +1,6 @@@ Line abov
++<<<<<<< HEAD
+bar
++=======
+ foo
++>>>>>>> Commit message
Це призведе до:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
Для відповідності виводу команд у загальних результатах відповідності grep:
$ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )| @@@.*' | sed -e '0~3{s/ @@@[ ]\?//}' | sed '2~3 s/$/\n1/g' | sed "N;N;N;s/\n/:/g"
foobar:1:1:Line abov
grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )
: Зіставити ім'я файлу з diff --cc <filename>
АБО Номер рядка відповідності від @@@ <from-file-range> <from-file-range> <to-file-range>
АБО Збіг залишився текст після @@@
.sed -e '0~3{s/ @@@[ ]\?//}'
: Видаліть @@@[ ]\?
з кожного 3-го рядка, щоб отримати необов'язковий контекст 1-го рядка раніше ++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: Додайте \n1
кожні 3 рядки між 2-м та 3-м рядками для номера стовпця.sed "N;N;N;s/\n/:/g"
: Приєднуйтесь кожні 3 рядки з а :
.Я використовую grep
як наївне рішення.
$ git diff | grep -A2 -- '---'
вихідний приклад:
--- a/fileA.txt
+++ b/fileA.txt
@@ -0,0 +1,132 @@
--
--- a/B/fileC.txt
+++ b/B/fileC.txt
@@ -33663,3 +33663,68800 @@ word_38077.png,Latin
--
--- a/D/fileE.txt
+++ b/D/fileE.txt
@@ -17998,3 +17998,84465 @@ word_23979.png,Latin
--
--- a/F
+++ b/F
@@ -1 +1 @@
Можливо, ви можете побачити кольоровий вихід. Це допомагає легко читати результати.