2012-03-29 24 views
42

"git diff --stat" và "git log --stat" cho thấy những thứ như:Có cách nào để hiển thị các dòng hiển thị git, các dòng thay đổi và các dòng được xóa không?

$ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07 
app/controllers/application_controller.rb | 34 +++------------------------- 
1 files changed, 4 insertions(+), 30 deletions(-) 

Nhưng những gì thực sự xảy ra trong đó cam kết là 4 dòng đã được thay đổi và 26 dây chuyền đã bị xóa đó là khác biệt so với thêm 4 dòng và xóa 30.

Có cách nào nhận được LOCs delta (26 trong trường hợp này) không? Tôi không thực sự quan tâm đến sự khác biệt giữa các dòng được thêm vào hoặc loại bỏ.

Trả lời

45

Bạn có thể sử dụng:

git diff --numstat 

để có được thông tin diff số.

Theo như việc tách sửa đổi khỏi cặp thêm và xóa, --word-diff có thể hữu ích. Bạn có thể thử một cái gì đó như thế này:

MOD_PATTERN='^.+(\[-|\{\+).*$' 
ADD_PATTERN='^\{\+.*\+\}$' 
REM_PATTERN='^\[-.*-\]$' 
git diff --word-diff --unified=0 | sed -nr \ 
    -e "s/$MOD_PATTERN/modified/p" \ 
    -e "s/$ADD_PATTERN/added/p" \ 
    -e "s/$REM_PATTERN/removed/p" \ 
    | sort | uniq -c 

Hơi dài để bạn có thể muốn phân tích cú pháp trong tập lệnh của chính mình.

+0

Cảm ơn quornian nhưng numstat cho chính xác các thông tin tương tự như stat, bổ sung và xóa . –

+0

Cập nhật câu trả lời của tôi để bao gồm một ví dụ sử dụng '--word-diff'. Điều đó có thể hữu ích hơn. – quornian

+0

Cảm ơn! Câu trả lời đã chỉnh sửa của bạn thật tuyệt vời. Tôi muốn xem có bao nhiêu dòng đã được thêm/sửa đổi/loại bỏ giữa hai cam kết cụ thể. Đối với những người khác có thể muốn làm như vậy, chỉ cần đặt tên nhánh trong lệnh, như trong: 'git diff commit1 commit2 --word-diff ...' trong đó commit1/2 là SHA1, nhánh, thẻ, v.v. –

1

git sử dụng khác biệt "thống nhất", chỉ có các dòng được thêm và xóa, dưới dạng định dạng khác. Bạn phải làm một cái gì đó bên ngoài để có được một diff cho thấy thêm, xóa, và thay đổi thông tin.

https://wiki.postgresql.org/wiki/Working_with_Git#Context_diffs_with_Git cung cấp liên kết tới tập lệnh cho phép chạy "cũ" khác thường - và từ đó bạn có thể tạo kết quả "context" diff. Sự khác biệt về ngữ cảnh hiển thị các dòng được thêm vào, loại bỏ và thay đổi, cho phép bạn lấy dữ liệu mà bạn muốn.

13
  1. Nếu bạn muốn biết các dòng thêm/thay đổi/xóa bởi một cam kết với id commit-id, bạn có thể sử dụng

    git show commit-id --stat 
    

    hoặc

    git diff commit-id-before commit-id --stat 
    
  2. Nếu bạn wat để biết các dòng được thêm/thay đổi/xóa theo phạm vi cam kết, bạn có thể sử dụng

    git diff commit-id1 commit-id2 --stat 
    
  3. Nếu bạn muốn biết các dòng thêm vào/thay đổi/xóa theo từng cam kết, bạn có thể sử dụng

    git log --stat 
    
Các vấn đề liên quan