2012-12-19 35 views
14

Tôi thử các tuỳ chọn git log w/--decorate--source. Nhưng vẫn không thể lấy tên chi nhánh của cam kết 2f3cb60d7e7776, Tại sao?Cách hiển thị nhật ký git với tên chi nhánh

#git log 2f3cb60 --graph --decorate --source --all --oneline 
... 
* | | | 1920ad5 refs/heads/gpio support gpio lib 
| |//
|/| | 
* | | 2f3cb60 2f3cb60 fix 
* | | d7e7776 2f3cb60 fix 
| |/ 
|/| 
* | aa4dcfb  refs/remotes/origin/httpd support 
* | cfc839d  refs/remotes/origin/httpd add folder 

Làm cách nào để hiển thị nhật ký git có tên chi nhánh?

Trả lời

18
$ git log --graph --decorate --oneline 
* 1f3e836 (HEAD, origin/v2, v2) Change scripts to new format. 
* 34d458f (origin/master, master) Merge branch 'new-shell' 
|\ 
| * 995ece7 (origin/new-shell) Fix index.html and add script pushing. 
| * fe0615f New shell hello-world. 
|/ 
* fe1b1c0 Progress. 
... 

git log --graph --decorate --oneline sẽ hiển thị cho bạn tên của các cam kết có tên. Không phải mọi cam kết đều được liên kết với tên chi nhánh.

Hãy nhớ rằng, tên chi nhánh chỉ là một con trỏ đến một cam kết cụ thể. Mỗi cam kết có một phụ huynh, do đó, một cam kết có thể là một phần của lịch sử của một chục chi nhánh riêng biệt.

  • Bạn có thể xem chi nhánh nào có cam kết qua git branch --contains <ref>.
  • Nếu bạn chỉ cần một số loại tên tượng trưng để theo dõi một cam kết, hãy sử dụng git name-rev <ref>.
  • Nếu bạn cần một danh sách vỏ kịch bản ("plumbing") của tất cả các chi nhánh có chứa một cam kết, cố gắng này:

    commit=$(git rev-parse <ref>) # expands hash if needed 
    for branch in $(git for-each-ref --format "%(refname)" refs/heads); do 
        if git rev-list "$branch" | fgrep -q "$commit"; then 
        echo "$branch" 
        fi 
    done 
    

Xem thêm: SO: Finding what branch a commit came from

+1

1 để cung cấp một giải pháp duy nhất sử dụng Git hệ thống ống nước. –

+0

Còn về 'git branch --contains ' thì sao? Kịch bản lệnh 'COMMIT = ... for ... done' shell làm gì với' git branch --contains' thì không? –

+1

@Colin 'git branch --contains' thật tuyệt! Đó là lý do tại sao nó là viên đạn đầu tiên trong ba lựa chọn được liệt kê của tôi. :) Điều này là 'git branch' không có đầu ra được đảm bảo - nó có thể thay đổi định dạng trong các phiên bản tương lai - vì vậy bạn có thể không muốn sử dụng nó trong các tập lệnh tồn tại lâu dài. Đây là một phần của sự tách rời [ống dẫn nước bằng sứ] (http://git-scm.com/book/ch9-1.html): Nếu bạn là người đọc đầu ra, bạn có thể sử dụng các lệnh bằng sứ như 'git branch ', nhưng nếu bạn đang viết một công cụ, bạn sẽ muốn sử dụng các lệnh hệ thống ống nước như' for-each-ref' và 'rev-list' đảm bảo định dạng đầu ra của chúng. –

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