Отримати всі git комітети з останнього тегу


126

Коли я збираюся позначати тег на коміті, мені потрібно знати, що змінилося з моменту останнього тегу. Наприклад:

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

У цьому прикладі я хотів би дізнатися про 3 новітні коміти, або мати можливість надрукувати журнал, як вище, який показує, що обидва здійснює свої теги, якщо такі є. І коли я бачу, що була додана нова функція, я би позначив її v1.5.0.

Як ти з цим справляється? Це я повинен використовувати теги? Що потрібно написати в повідомленні тегу? Я завжди залишаю це порожнім:git tag -a v1.2.3 -m ''

Відповіді:


224

git log <yourlasttag>..HEAD ?

Якщо ви хочете, щоб вони були, як у вашому прикладі, в одному рядку з повідомленням id + повідомлення, тоді

git log <yourlasttag>..HEAD --oneline

і якщо ви не знаєте свого останнього тегу або хочете, щоб це було динамічним, у Windows це можна зробити

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

і на linux / git bash / windows bash

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

Крім того, якщо у вас є випадок, коли ви знаєте тег в історії та хочете надрукувати все від цього тега до поточної ситуації, ви можете додати також, --decorateщоб він роздрукував будь-які теги між ними.


Чи є спосіб для цього пропустити об'єднання об'єднань?
Холлоуей

@Trengot не знаю, не розглядав це. Коміти злиття IMO - це те, чого уникнути все-таки, я замість цього використовую rebasing, коли це можливо.
eis

Версія linux також працює на Git для Windows Bash
kwesolowski

Чи не повинно бути <yourlasttag>+ 1?
Раффі Хатчадурян

@RaffiKhatchadourian якщо ви зробите це, ви б пропустити зміни , зроблені в фіксації <yourlasttag>+ 1 і ви отримаєте тільки після зміни , що
ейс

39

Якщо ваш поточний комітет також є тегом, і ви хочете динамічно отримувати зміни з попереднього тегу, не знаючи останнього тегу чи попереднього імені тегу, ви можете зробити:

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

Зверніть увагу, що @це короткий для HEAD.


приємно !, якщо просто хочете, щоб змінилися зміни тексту --oneline до --pretty = формат: "% s": git log --pretty = format: "% s" $ (git описуйте - теги --abbrev = 0 @ ^) .. @
JBarbosa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.