Git changelog: как получить все изменения до определенного тега?
есть ли простой способ или команда, чтобы получить все git commits до определенного тега для создания автоматического журнала изменений для проекта? Я всегда помечаю свои репозитории git номером версии, например v0.1.0
и, например, хотел бы, чтобы все коммиты до тега v0.1.0
.
Я просмотрел документы, но, похоже, не нашел для него полезной опции или команды:http://git-scm.com/docs/git-log (в данный момент, кстати, не работает)
для пример:
$ git log --oneline --decorate
показывает теги рядом с commits. Я хотел бы то же самое, но только до определенного тега.
7 ответов
вы можете просто сделать:
git log --oneline --decorate v0.1.0
... чтобы показать каждую фиксацию до и включая v0.1.0. Конечно,git log
позволяет также позволяет ограничить коммиты, показанные любым из способов, которые git rev-list
понимает, так что если вы только хотели увидеть изменения между v0.0.9
и v0.1.0
вы также можете сделать:
git log --oneline --decorate v0.0.9..v0.1.0
альтернативным выходом, который может быть полезен для этой цели, является git shortlog
, которые группируют и суммируют вклад каждого автора. Попробуй, ибо пример:
git shortlog v0.1.0
для создания изменений по тегам, я использовал этот скрипт:
#!/bin/bash
# Author:Andrey Nikishaev
echo "CHANGELOG"
echo ----------------------
git tag -l | sort -u -r | while read TAG ; do
echo
if [ $NEXT ];then
echo [$NEXT]
else
echo "[Current]"
fi
GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT
NEXT=$TAG
done
FIRST=$(git tag -l | head -1)
echo
echo [$FIRST]
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST
обновление скрипта, предложенного Creotiv, чтобы получить лучшую сортировку тегов
#!/bin/bash
# Author:Andrey Nikishaev, Gunnar Lindholm
echo "CHANGELOG"
echo ----------------------
git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags |tac |grep -v '^$' | while read TAG ; do
echo
if [ $NEXT ];then
echo [$NEXT]
else
echo "[Current]"
fi
GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT
NEXT=$TAG
done
FIRST=$(git tag -l | head -1)
echo
echo [$FIRST]
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST
есть очень полезный драгоценный камень, вывод написан в markdown, добавьте поддержку проблемы и разделите коммиты по тегам
просто добавить tagname
к вашей команде, и вы должны быть в порядке:) мне нравится --graph
переключитесь, чтобы визуализировать ветви, которые привели к этому тегу:)
Я придумал эту модификацию исходного сценария. Это правильно обрабатывает теги версий.
#!/bin/bash
# Author:Andrey Nikishaev
echo "CHANGELOG"
echo ----------------------
git tag -l --sort=v:refname | tac | while read TAG ; do
echo
if [ $NEXT ];then
echo [$NEXT]
else
echo "[Current]"
fi
GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT
NEXT=$TAG
done
FIRST=$(git tag -l --sort=v:refname | head -1)
echo
echo [$FIRST]
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST