Câu hỏi này gọi cho "số dòng", nếu bạn không quan tâm đến số dòng trong đầu ra, hãy xem câu hỏi và câu trả lời này .
Về cơ bản, tôi không muốn xem nội dung đã thay đổi, chỉ có tên tệp và số dòng.
Câu hỏi này gọi cho "số dòng", nếu bạn không quan tâm đến số dòng trong đầu ra, hãy xem câu hỏi và câu trả lời này .
Về cơ bản, tôi không muốn xem nội dung đã thay đổi, chỉ có tên tệp và số dòng.
Câu trả lời:
Lưu ý: nếu bạn đang chỉ tìm kiếm tên các tập tin thay đổi ( mà không cần các số dòng cho dòng đã được thay đổi), đó là dễ dàng, nhấp vào liên kết này để một câu trả lời ở đây .
Không có built-in tùy chọn cho việc này (và tôi không nghĩ rằng đó là tất cả những gì hữu ích cả hai), nhưng nó là tốt để làm điều này trong git, với sự giúp đỡ của một "diff bên ngoài" kịch bản.
Đây là một thứ khá nhảm nhí; tùy thuộc vào bạn để sửa chữa đầu ra theo cách bạn muốn.
#! /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 '^[<>-]'
Để biết chi tiết về "khác biệt bên ngoài", hãy xem mô tả GIT_EXTERNAL_DIFF
trong trang hướng dẫn git (khoảng dòng 700, khá gần cuối).
| grep -o '^[0-9]*'
cung cấp cho bạn chỉ những con số, giả sử bạn không quan tâm đến phía bên tay phải.
--diff-filter=...
nơi ...
phần đó là loại thay đổi bạn muốn xem: M
để sửa đổi, A
thêm, D
xóa, và các phần khác theo git diff
tài liệu.
Quá dễ:
git diff --name-only
Đi ra và khác!
git diff --name-only master..HEAD
Số dòng như số dòng thay đổi hoặc số dòng thực tế có chứa các thay đổi? Nếu bạn muốn số lượng dòng thay đổi, sử dụng git diff --stat
. Điều này cung cấp cho bạn một màn hình như thế này:
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
Không có tùy chọn để có được số dòng của các thay đổi.
git diff master --compact-summary
Đầu ra là:
src/app/components/common/sidebar/toolbar/toolbar.component.html | 2 +-
src/app/components/common/sidebar/toolbar/toolbar.component.scss | 2 --
Đây chính xác là những gì bạn cần. Định dạng tương tự như khi bạn thực hiện cam kết hoặc lấy các cam kết mới từ xa.
PS: Đó là dây mà không ai trả lời theo cách này.
1) Yêu thích của tôi:
git diff --name-status
Chuẩn bị trạng thái tập tin, ví dụ:
A new_file.txt
M modified_file.txt
D deleted_file.txt
2) Nếu bạn muốn thống kê, thì:
git diff --stat
sẽ hiển thị một cái gì đó như:
new_file.txt | 50 +
modified_file.txt | 100 +-
deleted_file | 40 -
3) Cuối cùng, nếu bạn thực sự chỉ muốn tên tệp:
git diff --name-only
Sẽ chỉ đơn giản là hiển thị:
new_file.txt
modified_file.txt
deleted_file
Tôi biết đây là một câu hỏi cũ nhưng trên Windows, điều này sẽ lọc đầu ra git cho các tệp và thay đổi số dòng:
(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>
Để giải nén các tập tin và các dòng thay đổi từ đó là một công việc nhiều hơn một chút:
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
Trên git version 2.17.1
, không có cờ tích hợp để đạt được mục đích này.
Dưới đây là một lệnh ví dụ để lọc tên tệp và số dòng từ một khác biệt hợp nhất:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
Ví dụ: khác biệt thống nhất:
$ 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
Sẽ cho kết quả:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
Để khớp với đầu ra của các lệnh trong kết quả khớp grep chung:
$ 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]+)? )
: Khớp tên tệp từ diff --cc <filename>
OR Kết hợp số dòng từ @@@ <from-file-range> <from-file-range> <to-file-range>
OR Kết hợp văn bản còn lại sau @@@
.sed -e '0~3{s/ @@@[ ]\?//}'
: Xóa @@@[ ]\?
khỏi mọi dòng thứ 3 để có được bối cảnh 1 dòng tùy chọn trước đó ++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: Thêm \n1
mỗi 3 dòng giữa dòng thứ 2 và thứ 3 cho số cột.sed "N;N;N;s/\n/:/g"
: Tham gia cứ sau 3 dòng với a :
.Tôi sử dụng grep
như một giải pháp ngây thơ.
$ git diff | grep -A2 -- '---'
một ví dụ đầu ra:
--- 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 @@
Có lẽ bạn có thể thấy một đầu ra màu. Nó giúp bạn đọc đầu ra dễ dàng.