Làm cách nào để chạy nhật ký git để xem các thay đổi chỉ dành cho một chi nhánh cụ thể?


395

Tôi có một chi nhánh địa phương theo dõi chi nhánh từ xa / chủ. Sau khi chạy git-pullgit-log, nhật ký sẽ hiển thị tất cả các xác nhận trong nhánh theo dõi từ xa cũng như nhánh hiện tại. Tuy nhiên, vì có quá nhiều thay đổi được thực hiện cho chi nhánh từ xa, tôi chỉ cần xem các cam kết được thực hiện cho chi nhánh địa phương hiện tại.

Lệnh Git sẽ sử dụng để chỉ hiển thị các cam kết cho một nhánh cụ thể là gì?

Ghi chú:

Thông tin cấu hình:

[branch "my-branch"]
  remote = origin
  merge = refs/heads/master

Câu trả lời:


526

Giả sử rằng chi nhánh của bạn đã được tạo ra master, sau đó trong khi ở chi nhánh (nghĩa là bạn đã kiểm tra chi nhánh):

git cherry -v master

hoặc là

git log master..

Nếu bạn không ở trong nhánh, thì bạn có thể thêm tên nhánh vào lệnh "git log", như sau:

git log master..branchname

Nếu chi nhánh của bạn đã được thực hiện origin/master, sau đó nói origin/masterthay vì master.


100
Hoàn hảo! git log --no-merges master..chính xác là những gì tôi cần.
Xa lộ cuộc sống

3
@HighwayofLife: --no-mergescó thể chỉ hiển thị các cam kết từ một chi nhánh cụ thể, nhưng thực sự nó chỉ hiển thị các cam kết không dẫn đến hợp nhất
rynmrtn

5
Làm thế nào về một cách để làm điều này mà không yêu cầu tôi gõ / biết chi nhánh cha mẹ? :)
ELLIOTTCABLE

1
Để hiểu được tỷ lệ thay đổi, tôi đã sử dụng câu thần chú sau đây :) tạo ra định dạng nhật ký một dòng với tên tác giả được hiển thị trước, tiếp theo là tuổi tương đối của cam kết:git log --no-merges --pretty='%C(yellow)%h%d %Creset%an %Cgreen%ar:%Creset %s' --graph master..
Noah Sussman

2
không nên đọc? git log master .. <chi nhánh của bạn>
Alex Nolasco

104

Sử dụng:

git log --graph --abbrev-commit --decorate  --first-parent <branch_name>

Nó chỉ dành cho nhánh mục tiêu (tất nhiên --graph, --aboustv-commit --decISE được đánh bóng nhiều hơn).

Tùy chọn chính là --first-Parent: "Chỉ theo dõi cam kết cha mẹ đầu tiên khi thấy một cam kết hợp nhất" ( https://git-scm.com/docs/git-log )

Nó ngăn chặn các dĩa cam kết được hiển thị.


25
--first-parent <branch_name>là lựa chọn. làm !
ký sinh

3
Tên chi nhánh ở đâu, chi nhánh mà lịch sử tôi chỉ muốn xem? Trên một nhánh chỉ có 3 thay đổi, điều này cho tôi thấy hàng trăm.
Ed Randall

1
--first-parent <branch_name>cũng làm việc cho tôi! Tôi đã kết thúc với một bí danh để git log --first-parent $current_branch_name --no-merges. Đáp lại @EdRandall, nó sẽ hiển thị các xác nhận trên nhánh + những từ nơi nó được phân nhánh. Ví dụ:
rachel

2
Rất tiếc, tôi đã gửi sớm, đây là ví dụ: Bạn đã cam kết A và B trên chủ. Bạn chi nhánh new_featuretừ chủ. Bạn thêm cam kết C và D vào nó. Sau đó, bạn thêm E và F để làm chủ. Sau đó, bạn hợp nhất chủ để new_feature. Sử dụng git logtrên new_feature, bạn sẽ thấy "hợp nhất chủ", F, E, D, C, A, B. Sử dụng git log --first-parent new_feature --no-merges, bạn sẽ thấy D, C, A, B.
rachel

24

Nếu bạn chỉ muốn những cam kết được thực hiện bởi bạn trong một nhánh cụ thể, hãy sử dụng lệnh dưới đây.

git log branch_name --author='Dyaniyal'

13

Vấn đề tôi gặp phải, mà tôi nghĩ là tương tự như thế này, đó là chủ nhân đã đi quá xa so với điểm nhánh của tôi để lịch sử trở nên hữu ích. (Điều hướng đến điểm nhánh sẽ mất nhiều thời gian.)

Sau một số thử nghiệm và sai sót, điều này đã cho tôi khoảng những gì tôi muốn:

git log --graph --decorate --oneline --all ^master^!

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.