Làm thế nào để hiển thị lịch sử nhật ký git cho một thư mục con của repo git?


228

Hãy nói rằng tôi có một repo git trông như thế này.

foo/
  .git/
  A/
   ... big tree here
  B/
   ... big tree here

Có cách nào để yêu cầu git log chỉ hiển thị các thông điệp tường trình cho một thư mục cụ thể. Ví dụ tôi muốn xem những gì cam kết tập tin chạm vào chỉ trong foo / A?

Câu trả lời:


242

Từ thư mục foo/, sử dụng

  git log -- A

Bạn cần '-' để tách <path>..khỏi các <since>..<until>refspecs.

# Show changes for src/nvfs
$ git log --oneline -- src/nvfs
d6f6b3b Changes for Mac OS X
803fcc3 Initial Commit

# Show all changes (one additional commit besides in src/nvfs).
$ git log --oneline
d6f6b3b Changes for Mac OS X
96cbb79 gitignore
803fcc3 Initial Commit

1
Nhân tiện, bạn nên ở trong thư mục "foo" trước khi thực hiện "git log - A B"
Sergey Leyko 10/03/2016

22
Đối với những người đọc lướt qua, điều này cho thấy những thay đổi trong A B , không chỉ Anhư OP yêu cầu
Aidan

1
@GoZoner, có cách nào để tìm tất cả các xác nhận trong đó một tên thư mục cụ thể đã được thay đổi không? thư mục có thể đã di chuyển xung quanh, vì vậy tôi không muốn tìm hiểu cách thức và nơi thư mục di chuyển ..
alpha_989

3
^^ Cập nhật để chỉ hiển thị các thay đổi A, như OP yêu cầu.
GoZoner

Điều gì nếu thư mục đã bị xóa trong đầu hiện tại?
Aaron Franke

34

nếu bạn muốn xem nó bằng đồ họa, bạn có thể sử dụng

gitk -- foo/A

nhập mô tả hình ảnh ở đây


26

Bạn có thể sử dụng git logvới tên đường dẫn của các thư mục tương ứng:

git log A B

Nhật ký sẽ chỉ hiển thị các cam kết được thực hiện trong AB. Tôi thường ném vào --statđể làm cho mọi thứ đẹp hơn một chút, giúp đánh giá cam kết nhanh chóng.


26

Đi vào

git log .

từ thư mục cụ thể, nó cũng đưa ra các xác nhận trong thư mục đó.


4
Không làm việc cho tôi..Sau khi hạ cánh trong thư mục cụ thể và đưa ra nhật ký git. đã cho tôi tất cả các cam kết từ gốc.
AKS

1
Làm việc cho tôi. Sử dụng git bash
buckley

2

Để theo dõi các thay đổi đối với thư mục nơi thư mục được di chuyển, tôi bắt đầu sử dụng:

git rev-list --all --pretty=oneline -- "*/foo/subfoo/*"

Điều này không hoàn hảo vì nó sẽ lấy các thư mục khác có cùng tên, nhưng nếu nó là duy nhất, thì nó dường như hoạt động.


0

Các câu trả lời khác chỉ hiển thị các tập tin thay đổi.

git log -p DIRlà rất hữu ích, nếu bạn cần khác biệt đầy đủ của tất cả các tệp đã thay đổi trong một thư mục con cụ thể.

Ví dụ: Hiển thị tất cả các thay đổi chi tiết trong một phạm vi phiên bản cụ thể

git log -p 8a5fb..HEAD -- A B

commit 62ad8c5d
Author: Scott Tiger
Date:   Mon Nov 27 14:25:29 2017 +0100

    My comment

...
@@ -216,6 +216,10 @@ public class MyClass {

+  Added
-  Deleted

1
Tôi không hiểu câu trả lời này liên quan đến câu hỏi như thế nào
Florian Leit Quay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.