2015-06-18 13 views
6

Tôi đang điều tra kho lưu trữ git. Tôi muốn lấy danh sách các tập tin đã thay đổi trong mỗi lần commit.git - danh sách tất cả các tệp đã thay đổi nhưng không bị xóa trong cam kết

Vì vậy, những gì tôi đã làm là tôi đã đến thăm từng cam kết thông qua các lệnh

git reset --hard <commitId> 

Sau đó, tôi đã sử dụng

git show --pretty="format:" --name-only #{commitId} 

Vấn đề với cái này là nó cung cấp cho các tập tin đã xóa trong commitId rằng mà tôi không muốn. Tôi cũng đã cố gắng:

git ls-files 

nó không trả lại các file bị xóa, tuy nhiên, nó sẽ trả về một danh sách tất cả các file đang tồn tại có tính mới hoặc được tạo ra trong cam kết trước đó.

Ví dụ:

>commit 1 
add "file1" 
add "file2" 

>commit 2 
change "file1" 

>commit 3 
add "file3" 
delete "file2" 

như vậy trong trường hợp này, tôi sẽ đến thăm từng cam kết. Và, nếu tôi cam kết 1, tôi muốn lấy danh sách "file1" và "file2". Nếu tôi cam kết 2, tôi sẽ nhận được "file1" và "file3" nếu tôi cam kết 3.

Bạn nghĩ gì?

Trả lời

5

Hãy thử sử dụng lệnh này:

git show --diff-filter=AM --pretty="format:" --name-only #{commitId} 

Đó là những gì bạn đã đề cập trong vấn đề ban đầu của bạn với một lá cờ --diff-filter thêm để hạn chế để chỉ các tập tin mà đã được thêm vào (A) hoặc sửa đổi (M). Để biết danh sách đầy đủ các loại tệp mà bạn có thể giới hạn, hãy xem tài liệu cho git show.

Như @MauricioTrajano được đề cập trong câu trả lời của mình, bạn không cần đặt lại cam kết để điều tra nó bằng cách sử dụng git show. Tất cả những gì bạn cần biết là hàm băm SHA-1 của cam kết, mà bạn có thể tìm thấy bằng cách đơn giản sử dụng git log trên nhánh đang được đề cập đến.

+1

Lý do tôi đặt lại là tôi muốn xem các tệp này tại thời điểm đó. – Arwa

2

Bạn không phải đặt lại HEAD thành cam kết trước đó để thực hiện việc này, tức là bạn không phải mất các thay đổi cục bộ của mình, git diff cho phép bạn so sánh giữa hai cam kết này miễn là bạn bảo mật cam kết băm. Trong trường hợp của bạn, bạn có thể làm:

git diff {COMMIT_1_HASH} {COMMIT_2_HASH} --name-only --diff-filter=AM 

Điều này có thể được sử dụng để xem các tệp được thêm vào và thay đổi giữa bất kỳ số lần commit nào.

Nếu bạn muốn nhận các tệp được thêm và sửa đổi chỉ với một lần commit thì chỉ cần sử dụng băm cam kết xuất hiện ngay sau cái bạn đang cố gắng xem xét.

Các vấn đề liên quan