2010-10-07 34 views
22

Trong khi thực hiện, tôi tạo các trường chuỗi mà tôi đã nhúng vào đầu ra được liên kết. Rất hữu dụng.Cách dễ dàng để phát hiện các tệp đã sửa đổi trong không gian làm việc Git là gì?

Khác với phức tạp sed/grep phân tích lệnh git status, làm cách nào tôi có thể dễ dàng xác định liệu tệp trong không gian làm việc đã được sửa đổi theo git?

+0

Nếu bạn chỉ quan tâm để biết liệu một cái gì đó đã thay đổi (không nào đã thay đổi) xem [Làm thế nào để lập trình xác định xem có sự thay đổi uncommited ?] (http://stackoverflow.com/q/3878624/193688) –

Trả lời

24

git ls-files -m

Để tìm bạn này có thể duyệt qua git help -a.

+0

Điều này là hoàn hảo. – Jamie

+8

@Jamie: Các tệp có thay đổi theo giai đoạn (nhưng không được cam kết) sẽ không hiển thị với 'git ls-files -m', có thể hoặc không thể là những gì bạn muốn. –

+1

Ah. Cảm ơn vì đầu vào của bạn. Thành thật mà nói, 'git ls-files -m' không phải là thứ tôi muốn, nhưng nó trả lời câu hỏi cụ thể của tôi. 1 cho bình luận và câu trả lời mặc dù. – Jamie

17

git status --porcelain dường như cung cấp một đầu ra có thể phân tích tốt đẹp.

+0

Rất đẹp. Sẽ hữu ích vì các lý do khác. – Jamie

+0

Thật tuyệt, tôi chỉ sử dụng nó để tự động hóa các bản tóm tắt git commit (như bạn nhận được từ giao diện web của GitHub) mà tôi thực sự tìm đến câu hỏi này: [one-liner để thêm, commit và push] (https: // github. com/lmmx/devnotes/wiki/Tự động-git-trạng thái-tóm tắt). –

26

Nếu bạn chỉ muốn một đồng bằng “Có sự khác biệt từ HEAD?”:

git diff-index --quiet HEAD 

Nếu mã thoát là 0, sau đó không có sự khác biệt.

Nếu bạn muốn “gì các file đã thay đổi từ HEAD?”:

git diff-index --name-only HEAD 

Nếu bạn muốn “gì các file đã thay đổi từ HEAD, và trong những cách đã họ đã thay đổi (thêm, xóa, thay đổi)? “:

git diff-index --name-status HEAD 

Thêm -M (và -C) nếu bạn muốn đổi tên (và sao chép) phát hiện.

Các lệnh này sẽ kiểm tra cả nội dung theo giai đoạn (những gì có trong chỉ mục) và các tệp trong cây đang hoạt động. Các giải pháp thay thế như git ls-files -m sẽ chỉ kiểm tra cây đang hoạt động chống lại chỉ mục (nghĩa là chúng sẽ bỏ qua bất kỳ nội dung nào được tổ chức (nhưng không được cam kết) cũng nằm trong cây đang hoạt động).

2

git diff --name-only cũng làm như vậy (có thể là trực quan hơn ...)

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