2012-06-06 30 views
17

Tôi đang viết một tập lệnh nhỏ và muốn biết có bao nhiêu cam kết tôi đã thực hiện trên một nhánh hiện tại kể từ khi được tạo.Số cam kết trên chi nhánh trong git

Trong ví dụ này tôi muốn có 2 cam kết thực hiện trên child:

git checkout master 
git checkout -b child 
... 
git commit -a 
... 
git commit -a 

Vì vậy, những gì tôi muốn là

commit_number = ... 
echo $commit_number 

Cảm ơn bạn đã giúp đỡ của bạn.

+0

bản sao có thể có của [Số lần cam kết trong kho lưu trữ git] (http://stackoverflow.com/questions/1199312/number-of-commits-in-a-git-repository) –

+2

@ZoltanToth câu trả lời từ câu trả lời câu hỏi của bạn số lượng cam kết kể từ khi tạo kho lưu trữ, không phải vì chi nhánh đã được tạo. –

+0

Xin vui lòng xem xét câu trả lời của tôi (giả sử tốt hơn): https://stackoverflow.com/a/47133753/931908 –

Trả lời

40

Git có thể cung cấp cho bạn số lần commit mà không cần thêm kịch bản lệnh shell.

git rev-list master.. --count 

rev-list là một nửa ẩn (không được liệt kê trong git help) lệnh được sử dụng để làm việc với các phiên bản.

master.. sẽ liệt kê các cam kết từ cơ sở chính và nhánh hiện tại đến chi nhánh hiện tại, --count sẽ cung cấp cho bạn số lượng của chúng.

Nếu thay vào đó, bạn muốn có số lần commit giữa hai phiên bản bạn sẽ sử dụng master.... Để xây dựng: giữa từ master đến tổ tiên chung gần nhất của master và nhánh hiện tại (HEAD), và đến nhánh hiện tại một lần nữa. Nếu bạn hình dung lịch sử cam kết như một cái cây, bạn sẽ có thể theo dõi hai nhánh từ tổ tiên chung. Mặt khác, master.. sẽ chỉ đếm một trong hai nhánh.

Vì vậy, cho dù bạn muốn sử dụng master.. hoặc master... phụ thuộc vào việc bạn muốn biết bao nhiêu cam kết bạn đã thực hiện tại chi nhánh của bạn kể từ khi bạn chia nó đi (master..), hoặc phần chênh lệch giữa hiện tổng thể và chi nhánh , số lượng cam kết trong các chi nhánh chính do chi nhánh bị tách ra.

+3

Đây là giải pháp tốt hơn câu trả lời được chấp nhận, mặc dù tôi sẽ đặt tùy chọn trước các cam kết: 'git rev- danh sách --count master..' –

+0

Câu trả lời hay hơn vì nó cũng bao gồm các nền tảng không * nix. – gnuchu

15

Giả sử bạn phân nhánh từ trang cái, master..yourbranch cung cấp cho bạn phạm vi cam kết trong yourbranch nhưng không ở chế độ chính.

Sau đó, bạn chỉ cần liệt kê chúng mỗi một dòng, và đếm số dòng:

git log master..yourbranch --pretty=oneline | wc -l 
7

Cập nhật: git rev-list hiện có --count:

git rev-list --count master.. 

Với cũ git phiên bản:

git rev-list master.. |wc -l 

rev-list l ists sửa đổi và master.. đề cập đến cam kết kể từ hiện tại HEAD được phân tách từ master.

+1

Tôi đã phải sử dụng cái này để tương thích với phiên bản 'git rev-list' đủ cũ mà họ không có chuyển đổi '--count' –

+0

@ChuckWilbur cảm ơn cho nhận xét, tôi đã thêm' --count' vào câu trả lời – user1338062

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