2009-11-29 31 views
22

Có cách nào để lấy danh sách các tệp sẽ được cam kết khi tôi nhập thông tin sau không?Làm cách nào để chỉ liệt kê các tệp sẽ được cam kết?

git commit -m "my changes" 

danh sách trạng thái git quá nhiều. Tôi có thể loại bỏ tất cả các từ, nhưng tôi không muốn. Và tôi không muốn được kể về những tập tin không được giải quyết.

Tôi đã thử

git ls-files -md 

nhưng điều đó không hiển thị tập tin đã được thêm vào thời gian gần đây, nhưng chưa được thực hiện.

Tôi đang tìm cho cùng một sản lượng bạn muốn nhận được từ

svn status -q 

Ví dụ $ svn tình trạng -q
Một file.py
M dir/database.py
M bắt đầu py

Trả lời

4

Bạn có thể thử:

git diff --name-status 

Tôi nhận được các thông tin sau:

$ git diff --name-status 
M  README.markdown 

Nếu không có tập tin không được theo dõi.

+2

Điều này không chính xác. Câu hỏi là, "những gì sẽ được cam kết khi tôi nói' git commit -m message' ". Điều này tạo ra sự khác biệt giữa cây công việc và bộ nhớ cache gần với những gì * sẽ không * được cam kết. –

26

Đây là những gì tôi đang tìm kiếm. Nhờ notnoop dẫn đầu tôi cần. Tôi muốn đăng lại giải pháp của mình trong trường hợp nó giúp người khác.

git diff HEAD --name-only 

Kể từ khi tôi có ý định làm

git commit -s -F mesage.txt 

với các tập tin được tìm thấy trong dòng đầu tiên.

Mục đích của tôi là tạo một hệ thống nhỏ hoàn toàn bỏ qua chỉ mục tức là tôi không bao giờ cần phải thêm git. (Từ những gì tôi hiểu, chỉ mục hữu ích khi tạo bản vá, không phải là không có nghĩa là chỉ tiêu trong quy trình làm việc của tôi.)

+2

bạn không có nghĩa là 'git diff --cached --name-only'? 'diff HEAD' sẽ hiển thị các tập tin được cam kết cuối cùng và không được đẩy. phần '--cached' sẽ hiển thị các tệp sẽ được cam kết khi bạn chạy' git commit' – gcb

+0

'git diff --staged --name-only' cũng hoạt động. Tùy thuộc vào cách bạn nghĩ về git bạn có thể muốn sử dụng --ghi [synonym] (https://stackoverflow.com/a/39877896) thay vì --cached. – SpeedCoder5

8

Lệnh này sẽ cho bạn biết những gì tệp trong vùng chỉ mục/bộ nhớ cache/dàn dựng khác với HEAD hiện tại (và cho dù chúng là bổ sung, sửa đổi hoặc xóa) là những thay đổi sẽ được cam kết nếu bạn sử dụng git commit mà không có đường dẫn rõ ràng hoặc tùy chọn -a. Định dạng của nó tương đối giống với đầu ra svn status mà bạn hiển thị.

git diff --cached --name-status 
3

Tôi biết OP gốc hỏi để tránh git status, nhưng tôi cảm thấy điều này sẽ được tốt đẹp để lại cho hậu thế (nghĩa là người khác không chia sẻ đặt OP của).

git status --porcelain | grep -v '^[ |??]' | sed -e 's/[A-Z] *//' 

lập luận của tôi là git status --porcelain có vẻ như nó được xây dựng cho chính xác kiểu này tình thế khó khăn ...

nguồn: http://git-scm.com/docs/git-status.html

EDIT: Bạn có thể chọn để không sử dụng sed -e 's/[A-Z] *//' nếu bạn muốn giữ lại thẻ sửa đổi git trước mỗi tên tập tin.

+0

+1. Tôi đồng ý rằng 'git status --porcelain' có thể được sử dụng trong một script. Tôi đã ghi lại nhiều điều trong http://stackoverflow.com/a/6978402/6309, nói rằng "Tùy chọn mới \ [' --porcelain' \] làm cho định dạng đầu ra gốc của lệnh phát ra đầu ra dễ xử lý hơn Sứ. " – VonC

+0

Điều này dường như không liệt kê các tệp thực sự sẽ được đẩy trong khi đẩy git (và đã được dàn dựng bởi một git add/commmit) – Paul

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