Получить все коммиты git с момента последнего тега

127

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

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 ''

ChocoDeveloper
источник

Ответы:

226

git log <yourlasttag>..HEAD ?

Если вы хотите, чтобы они, как в вашем примере, в одной строке с идентификатором фиксации + сообщение, то

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, вместо этого я использую ребазинг, когда это возможно.
eis
Версия для Linux также работает с Git для Windows Bash
kwesolowski
Разве это не должно быть <yourlasttag>+1?
Раффи Хатчадурян
@RaffiKhatchadourian, если бы вы сделали это, вы бы пропустили изменения, сделанные в commit <yourlasttag>+ 1, и вы бы получили изменения только после этого
eis
40

Если ваша текущая фиксация также является тегом и вы хотите динамически получать изменения с момента предыдущего тега, не зная ни последнего тега, ни имени предыдущего тега, вы можете сделать:

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

Обратите внимание, что @это сокращение от HEAD.

mediafreakch
источник
хорошо !, если просто нужно изменить текст коммитов --oneline на --pretty = format: "% s": git log --pretty = format: "% s" $ (git describe --tags --abbrev = 0 @ ^) .. @
JBarbosa