2011-01-07 22 views
24

Tôi đang sử dụng Git cho dự án của tôi và cố gắng làm theo thực hành tốt nhất:Hiện chỉ lịch sử của một chi nhánh tại một Git đăng nhập

  1. tôi làm việc trên một chi nhánh chủ đề
  2. Khi đã sẵn sàng, tôi hợp nhất chi nhánh chủ đề vào chi nhánh dev của mình bằng cách sử dụng git merge --squash. Điều này giúp giữ chi tiết dev của mình chi nhánh.
  3. Bất cứ khi nào dev chi nhánh ổn định và nhóm quyết định đó là thời gian cho một thông cáo, chúng tôi kết hợp các dev chi nhánh vào chủ chi nhánh, mà không sử dụng bí, và thẻ đó cam kết là một phát hành phiên bản.

này nên giữ lại lịch sử của chúng tôi, và sử dụng gitk, chúng ta có thể nhìn thấy nơi tất cả các cam kết đi vào. Tuy nhiên, tôi muốn để có thể nhìn thấy chỉ các cam kết áp dụng cho các chủ chi nhánh. Tôi đã thử:

git log master 
git show-branch 

Không ai trong số những hiển thị chỉ lịch sử của chủ chi nhánh. Có cách nào để dễ dàng làm điều này?

+0

Bạn không thể 'git checkout' vào nhánh 'master' và thực hiện 'git log'? – yasouser

Trả lời

21

Nếu tôi hiểu chính xác bạn, bạn muốn xem việc hợp nhất trở lại thành chính, chứ không phải lịch sử của những lần hợp nhất đó. Tôi tin rằng:

git log --merges 

sẽ cung cấp cho bạn những gì bạn muốn.

CẬP NHẬT: Thêm - cha mẹ đầu tiên nên khắc phục điều này từ âm thanh của nó.

git log --merges --first-parent 

--Trước cha mẹ

Follow only the first parent commit upon seeing a merge commit. 

Tùy chọn này có thể cung cấp một cái nhìn tổng quan tốt hơn khi xem sự phát triển của một đặc biệt chi nhánh chủ đề, bởi vì sáp nhập thành một chi nhánh chủ đề có xu hướng chỉ về việc điều chỉnh để cập nhật ngược dòng theo thời gian và tùy chọn này cho phép bạn bỏ qua các cam kết riêng lẻ được đưa vào t o lịch sử của bạn bằng cách hợp nhất như vậy.

+1

Hầu như, nhưng tiếc là điều này cũng cho tôi thấy sự hợp nhất xảy ra trong nhánh * dev *. Tôi chỉ muốn xem các kết hợp từ * dev * vào * master * –

+1

cha mẹ đầu tiên không nhất thiết phải là chi nhánh đã ở trước, nó được xác định trong quá trình hợp nhất (nhánh mà trong đó hợp nhất đã xảy ra). Nếu bạn chuyển tiếp nhanh đến một phép hợp nhất, cha mẹ đầu tiên là nhánh kia. – steabert

3

Vì Git không lưu trữ thông tin về chi nhánh nào mới bắt đầu, nên không có cách tự động nào để đoán chi nhánh nào bạn có thể muốn hiển thị.

Về vấn đề đó, --first-parent sẽ không giúp ích gì nhiều, đặc biệt vì dễ dàng có nhiều hơn một thầy. Hãy xem xét:

wc1$ git clone git://shared.com/repo 
wc1$ (hack code, git commit) 
wc2$ git clone git://shared.com/repo 
wc2$ (hack code, git commit, git push somewhere) 
wc1$ git fetch origin; git merge origin/master; git push somewhere master; 

(Hãy tham gia một dự án ngẫu nhiên và thực hiện bài tập này).Vì vậy, bạn không thể vẽ đồ thị một cách có ý nghĩa "chỉ một nhánh", ngay cả khi các cam kết được gắn thẻ với tên của chi nhánh mà chúng được tạo ra (vì cả hai đều là chủ).

+1

Giả sử trong các tình huống như thế này, nơi nhiều nhánh được gọi là 'chủ', bạn muốn xem tất cả chúng. (Trong thực tế, khi tôi muốn một cái gì đó tương tự như câu hỏi ban đầu ở đây, đó là chính xác những gì tôi đã muốn - đã có nhiều lịch sử, và tôi đã muốn nhìn thấy tất cả chúng.) Vì vậy, câu trả lời cho " chi nhánh bạn có thể muốn "sẽ là" tất cả chúng "- không cần phải giải quyết nó chỉ một. –

8

Thật không may, Git không lưu trữ thông tin chi nhánh cho cam kết và cam kết không thuộc về chi nhánh. Các chi nhánh trong Git chỉ là "chuyển các thẻ" trong một quá trình cam kết và KHÔNG phải là một chuỗi các cam kết như mong đợi.

Vì vậy, về cơ bản bạn không thể hiển thị các cam kết thuộc về chi nhánh vì không có khái niệm như vậy trong Git.

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