đăng nhập 10 đầu tiên bằng git


91

Hai câu hỏi:

  1. Cách hiển thị 10 commit đầu tiên trong git từ đầu đến cuối. (không có chi nhánh)
  2. Cách xác định chỉ mục cam kết và ghi lại nó. (hiển thị thứ hai hoặc thứ ba)

Tôi biết rằng git sử dụng cha để liên kết cam kết, thật dễ dàng để ghi lại cam kết từ đầu đến đầu. giống:git log HEAD~10

Nhưng tôi cần phải truy vấn từ đầu đến cuối, có được không?



cuộn đến câu trả lời @kostix
Muhammad Umer

Câu trả lời:


60

Đơn giản chỉ cần ghi lại mọi thứ với một định dạng dòng và điều chỉnh đầu ra:

git log  --pretty=oneline | tail -n 10 

Tuyệt quá! Đó là những gì đang tìm kiếm. Tks @CharlesB.
yohan zhou

3
Hoặc, sử dụng git rev-list HEAD | tail -n 10để liệt kê 10 ID, sau đó bạn có thể hiển thị ở bất kỳ định dạng nào bạn thích (không giới hạn ở phương pháp một dòng).
torek

16
taildường như mất màu đẹp mà tôi nhận được trong bảng điều khiển git của mình. Truyền một tham số như git log --oneline -10trong câu trả lời khác hoạt động như tôi mong đợi.
James Hulse

4
Đây rõ ràng là cách Unix lõi cứng, lol. Vui lòng xem câu trả lời của @kostix.
9301293

1
Nhược điểm của phương pháp này là tôi chỉ có thể thấy các cam kết đã đẩy của mình.
Jack '

255
git log -10

Sẽ hiển thị 10 cam kết mới nhất phù hợp với thông số sửa đổi (một thông số kỹ thuật bị thiếu có nghĩa là "tất cả các cam kết").

Xem trang chủ:

git help log

phần Commit Limiting

-<number>, -n <number>, --max-count=<number>
    Limit the number of commits to output.

6
đơn giản và không phụ thuộc vào tailviệc có sẵn trên nền tảng của bạn.
tenpn

8
& không gây rối với định dạng / màu git. Điều này sẽ là câu trả lời được chấp nhận x100
kuzyn

10
Không phải những gì op muốn: anh ấy muốn first10, không phải latest.
Timo

1
@Timo, hoàn toàn có thể có, nhưng câu hỏi như đã nêu là mở để giải thích và rất nhiều người có vẻ sẽ tán thành câu trả lời của tôi chỉ vì những khác biệt mở này. Vì vậy, trong khi tôi đồng ý với bạn về mặt kỹ thuật, chúng ta hãy giữ nguyên như vậy, tôi cho là vậy ;-) Trong số các đề xuất đúng về mặt kỹ thuật, tôi thích nhất nhận xét của người xé bỏ câu trả lời được chấp nhận.
kostix

@kostix "Cách hiển thị 10 cam kết đầu tiên trong git từ đầu đến cuối" không phải là "mở để giải thích" theo như tôi nói. Rõ ràng là nó yêu cầu 10 cam kết đầu tiên , không phải mới nhất .
Bobby Jack

30

Đây là cách tiếp cận của tôi,

Để nhận được 10 cam kết đầu tiên:

git log -n 10

-n là số

Bổ sung Để có được 10 cam kết tiếp theo, hãy bỏ qua 10 đầu tiên:

git log --skip=10 -n 10

Tôi nghĩ rằng đây nên là câu trả lời phù hợp. Sử dụng đuôi sẽ gây --graph ngừng làm việc trong git log
relief.melone

Đây phải là câu trả lời được chấp nhận. hoạt động như một sự quyến rũ đối với tôi
Doogle

bạn cũng mất màu phông chữ trên bảng điều khiển bằng cách sử dụng đuôi. đây là câu trả lời đúng
CESCO

14

Để nhận được 10 cam kết cuối cùng:

git log HEAD~10..HEAD

Để sắp xếp chúng theo thứ tự cũ nhất đến mới nhất:

git log --reverse HEAD~10..HEAD

Lưu ý rằng nếu có hợp nhất, điều này có thể hiển thị hơn 10 cam kết; thêm --first-parentnếu bạn chỉ muốn duyệt qua cha mẹ đầu tiên của mỗi nhánh.

Để biết thêm chi tiết, hãy xem tài liệu cho git rev-list.


Chỉnh sửa: Bạn đã có một câu trả lời hữu ích ở trên để "hiển thị cam kết gần đầu lịch sử" (một lần nữa, hãy xem cảnh báo về nhiều DAG cam kết không được kết nối trong một repo). Nhưng bạn cũng có thể làm, ví dụ:

git log --no-walk `git rev-list HEAD | tail -n 10`

và:

git log --no-walk `git rev-list --reverse HEAD | head -n 10`

tùy thuộc vào thứ tự bạn muốn kết quả.


Tks bạn đã trả lời. Nhưng tôi không cần 10 lần cam kết cuối cùng mà là lần đầu tiên. Cụ thể, nếu cam kết là ABCDEFG (HEAD). Làm thế nào để đăng nhập ABC và làm thế nào để đăng nhập C theo chỉ số 2?
yohan zhou

Oh! Không có gì đảm bảo rằng chỉ có một "cam kết đầu tiên", nhưng nếu có, hãy xem liên kết @CharlesB được thêm vào.

Cách có thể làm việc. bất kỳ cách tự nhiên? git log --pretty = oneline | wc -l git log HEAD ~ <Một số trừ hoặc index>
Yohan zhou

Cảm ơn vì câu trả lời. Đây là những gì tôi cần để tránh các tùy chọn kiểu '-10' trong bí danh git của mình. chấp nhận đối số số.
vicTROLLA

11

kết quả tốt nhất đi kèm với sự kết hợp của cả hai câu trả lời tốt nhất:

git log --pretty=oneline -10

1
Cảm ơn Tôi sử dụng điều này làm bí danh git để nhanh chóng hiển thị các cam kết gần đây mà không cần điền vào thiết bị đầu cuối của mình. Tôi gọi là bí danh lkj = log --pretty=oneline --abbrev-commit -10. Bây giờ tôi nhận ra nó không trả lời câu hỏi của OP nhưng tôi đến đây để tìm công tắc số đơn giản.
Paul Rougieux

4

Đơn giản chỉ cần ghi nhật ký mọi thứ ngược lại -1 nghĩa là liệt kê một nhật ký

git log  --reverse -1

3

tôi sẽ sử dụng lệnh cú pháp đơn giản dưới đây;

git log -10 --oneline

1
Hãy nghĩ rằng đây là cách hiệu quả nhất!
Nishant

0

Vì ... chi tiết hơn: p

  1. Cách hiển thị 10 commit đầu tiên trong git từ đầu đến cuối. (không có chi nhánh)
  2. Cách xác định chỉ mục cam kết và ghi lại nó. (hiển thị thứ hai hoặc thứ ba)

Bởi (không có chi nhánh), bạn có thể hỏi về reflogchuỗi tổ tiên hơn là bất kỳ chuỗi tổ tiên nào. Những điều sau đây không liên quan gì đến nhánh bạn đang tham gia.

git log -g --pretty=oneline | tail -10

<sha> HEAD@{###}: action: summary (old)
<sha> HEAD@{###}: action: summary (older)
...
<sha> HEAD@{###}: action: summary (oldest)
  • -g--walk-reflogsThay vì đi bộ chuỗi tổ tiên cam kết, hãy đi bộ các mục nhập reflog.q
  • chỉ thêm |cut -d ' ' -f 2|tr -d ':' > logvào nhật ký chỉ mục cam kết reflog.

Phần sau sẽ hiển thị tổ tiên sớm nhất của chi nhánh hiện đã kiểm tra.

git log --reverse --pretty=oneline | head -10 | cat -n

1 <sha> summary (oldest)
2 <sha> summary (second)
  • --reverse Đưa ra các cam kết theo thứ tự ngược lại.
  • Không thể sử dụng đơn giản -n 10hoặc -10vì nó bị hỏng--reverse
  • cat -n thêm số dòng (chỉ số cam kết?)


0

Trong trường hợp ai đó muốn nhiều hơn chỉ git nhật ký một dòng:

git log --reverse | awk 'NR>1 {print last} {last=$0}; /^commit/ && ++c==11{exit}'

trong đó 11ở cuối nên được đặt thành 1nhiều hơn số lượng cam kết bạn muốn.

Như ở đây chỉ ra git log --reverse -n 10không hoạt động như bạn cần. ( Tôi cho rằng nó cần phải không có tính chất giao hoán để cung cấp cho bạn khả năng chọn 10 cam kết đầu tiên theo thứ tự ngược lại hoặc 10 cam kết cuối cùng 🤪)

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.