2011-06-30 15 views
13

Sau khi kéo từ máy chủ git, tôi đang cố gắng lấy danh sách tất cả các tệp đã thay đổi. Tôi không cần bất kỳ bộ phận cụ thể của mã, chỉ cần một danh sách các tập tin (với một số loại dấu hiệu cho đến khi nó được thêm vào, loại bỏ hoặc thay đổi).Nhật ký thay đổi kéo Git

đầu tiên tôi nhìn sử dụng git log, nhưng điều đó appearantly chỉ trả lại thông tin từ các cam kết cuối cùng:

git log --name-status --max-count=1 --pretty=format:""

Vì đây appearantly chỉ nhận được những thay đổi từ cam kết cuối cùng trong một kéo, tôi cố gắng tìm cách để có được tất cả các thay đổi (kéo hầu như luôn luôn tồn tại trong nhiều cam kết).

Có lệnh nào cho việc này không? (Tôi đang tương tác với Git từ PHP, btw)

Trả lời

25

Sau khi kéo, ORIG_HEAD đề cập đến nơi bạn đã ở trước và HEAD đề cập đến vị trí hiện tại của bạn. Vì vậy, ORIG_HEAD.. có nghĩa là những thay đổi được kéo vào nhánh hiện tại. --max-count=1 chỉ là cam kết cuối cùng, không phải những gì bạn muốn, như bạn đã khám phá.

Bạn có thể muốn một cái gì đó như git diff --name-status ORIG_HEAD.. sẽ xuất ra mã trạng thái đơn và tên tệp cho mỗi tệp đã thay đổi, tập hợp tất cả các cam kết lại với nhau. Nếu bạn muốn nó được chia nhỏ theo từng thay đổi, bạn cần một cái gì đó giống như git log --oneline --name-status ORIG_HEAD..

+1

'git diff --name-tình trạng ORIG_HEAD..' làm việc như một nét duyên dáng, có thể không nói cảm ơn đủ! –

+2

'alias gpull = 'git pull; git diff --name-status ORIG_HEAD .. ''Chỉ cần những gì tôi muốn, thêm vào đây .bashrc – tponthieux

+0

Điều này không hoạt động như mong muốn nếu bạn có chi nhánh theo dõi từ xa theo dõi một chi nhánh khác. Ví dụ, nếu tôi có nhánh của tôi 'topic' theo dõi' origin/master'. Kéo sẽ rebase 'topic' vào' origin/master'. Để xem delta chỉ được giới thiệu trên nhánh thượng nguồn, bạn có thể chạy 'git lg @ {1} .. @ {u}'. '@ {1}' sử dụng reflog và giống với 'ORIG_HEAD'. '@ {u}' là nhánh ngược dòng của bạn (nhánh theo dõi từ xa) –

0

Một lệnh khác là:

git pull --stat