Nhận tất cả các cam kết git kể từ thẻ cuối cùng


126

Khi tôi định gắn thẻ một cam kết, tôi cần biết điều gì đã thay đổi kể từ lần cam kết được gắn thẻ cuối cùng. Ví dụ:

a87a6sdf87a6d4 Some new feature
a87a6sdf87a6d3 Some bug fix
a87a6sdf87a6d2 Some comments added
a87a6sdf87a6d1 Some merge <- v1.4.0

Trong ví dụ này, tôi muốn biết về 3 cam kết mới nhất hoặc có thể in một nhật ký như trên để hiển thị cả hai cam kết nếu có. Và khi tôi thấy có một tính năng mới được thêm vào, tôi sẽ gắn thẻ nó v1.5.0.

Làm thế nào để bạn đối phó với điều này? Đây có phải là cách tôi phải sử dụng thẻ không? Tôi nên viết gì trong tin nhắn thẻ? Tôi luôn để trống:git tag -a v1.2.3 -m ''

Câu trả lời:


224

git log <yourlasttag>..HEAD ?

Nếu bạn muốn chúng giống như trong ví dụ của mình, trên một dòng có id cam kết + thông báo, thì

git log <yourlasttag>..HEAD --oneline

và trong trường hợp bạn không biết thẻ mới nhất của mình hoặc muốn thẻ này là động, trên windows, bạn có thể làm

for /f "delims=" %a in ('git describe --tags --abbrev^=0') do @set latesttag=%a
git log %latesttag%..HEAD --oneline

và trên linux / git bash / windows bash

git log $(git describe --tags --abbrev=0)..HEAD --oneline

Ngoài ra, nếu bạn gặp trường hợp bạn biết một thẻ trong lịch sử và muốn in mọi thứ từ thẻ đó cho đến tình huống hiện tại, bạn có thể muốn thêm vào --decorateđể nó có thể in ra bất kỳ thẻ nào ở giữa.


Có cách nào để bỏ qua các cam kết hợp nhất không?
Holloway

@Trengot không biết, chưa xem xét điều đó. Các cam kết hợp nhất IMO dù sao cũng nên tránh, tôi sử dụng phương pháp khôi phục thay thế bất cứ khi nào có thể.
eis

Các phiên bản Linux cũng hoạt động trên Git cho Windows Bash
kwesolowski

Nó không phải là <yourlasttag>+ 1?
Raffi Khatchadourian

@RaffiKhatchadourian nếu bạn làm vậy, bạn sẽ bỏ lỡ những thay đổi được thực hiện trong cam kết <yourlasttag>+ 1 và bạn chỉ nhận được những thay đổi sau đó
eis

39

Nếu cam kết hiện tại của bạn cũng là một thẻ và bạn muốn tự động nhận các thay đổi kể từ thẻ trước đó mà không cần biết thẻ mới nhất cũng như tên thẻ trước đó, bạn có thể thực hiện:

git log --oneline $(git describe --tags --abbrev=0 @^)..@

Lưu ý rằng đó @là viết tắt của HEAD.


tốt !, nếu chỉ muốn thay đổi văn bản cam kết --oneline thành --pretty = format: "% s": git log --pretty = format: "% s" $ (git description --tags --abbrev = 0 @ ^) .. @
JBarbosa
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.