2010-10-22 10 views
32

Giả vờ tôi phân nhánh từ chi nhánh chính của tôi đến một nhánh chủ đề, và sau đó tôi đã thực hiện một vài cam kết trên nhánh chủ đề của mình. Có một lệnh cho tôi biết băm cam kết trên nhánh chính mà nhánh chủ đề của tôi có nguồn gốc không?git cách tìm băm cam kết trong đó chi nhánh có nguồn gốc từ

Lý tưởng nhất, tôi sẽ không phải biết mình đã thực hiện bao nhiêu cam kết (cố gắng tránh HEAD^5).

Tôi đã googled và SO'd xung quanh và dường như không thể đáp xuống câu trả lời. Cảm ơn!

+0

http://stackoverflow.com/questions/2706797/git-finding-what-branch-a-commit-came-from có ​​thể là sự khởi đầu, mặc dù nó không phải là * chính xác * câu hỏi của bạn. – VonC

+0

@VonC cảm ơn vì liên kết, không hoàn toàn là những gì tôi muốn nhưng đó là một khởi đầu tốt – brycemcd

Trả lời

32

sử dụng git merge-base master your-branch để tìm tổ tiên chung tốt nhất giữa hai nhánh (thường là điểm phân nhánh).

+23

@Bryce: lưu ý rằng nếu bạn thực hiện một số hợp nhất trung gian, điều này sẽ cung cấp cho bạn tổ tiên chung gần đây nhất, không nhất thiết phải là điểm phân nhánh đầu tiên. – Cascabel

+0

Điều này dường như không còn hoạt động nữa. Tôi chỉ nhận được thông tin sử dụng: 'usage: git merge-base [-a | --all] ...'. Tôi đoán rằng việc thêm 'HEAD' vào lệnh trên sẽ đưa ra câu trả lời đúng. –

+0

Có một tùy chọn cho ngắn có đầu ra không? git merge-base mast my_branch | git rev-parse --short HEAD –

54

Bạn có thể sử dụng git reflog show --no-abbrev <branch name>. Nó sẽ đưa ra tất cả các thay đổi đối với chi nhánh, bao gồm nó tạo ra, ví dụ (Tôi tạo ra chi nhánh xxx từ master chi nhánh):

bdbf21b087de5aa2e78a7d793e035d8bd9ec9629 [email protected]{0}: branch: Created from master 

Lưu ý rằng đây không phải là rất đáng tin cậy như hồ sơ reflog có thể hết hạn (90 ngày theo mặc định) và có vẻ như không có cách nào đáng tin cậy 100% để thực hiện việc này.

+0

Đây phải là câu trả lời được chấp nhận. –