Как вывести список коммитов без тегов в Git - PullRequest
3 голосов
/ 15 апреля 2019

Я хочу получить список всех коммитов, с которыми не связан какой-либо тег, в определенной ветке.

Я пытался

git show-ref --tags

, но он не работал.

Ответы [ 4 ]

2 голосов
/ 15 апреля 2019

Исправлено!

Ветка проверки затем запустить git log --format="%h %d" |grep -v '(tag:' | awk '{print $1}'

1 голос
/ 16 апреля 2019
git log --pretty="%D%H" --decorate=short --decorate-refs=refs/tags | grep -v "^tag: "

--pretty="%D%H" печатает ссылку и хэш.

--decorate=short печатает ссылки в коротком формате.

--decorate-refs=refs/tags печатает только метки.

grep -v "^tag: " исключает строки, начинающиеся с tag:. Остальные - коммиты, на которые не указывает ни один тег.

1 голос
/ 15 апреля 2019

Быстрое и грязное решение для текущей ветки и при условии, что ваша оболочка поддерживает подстановка процесса :

git log --format='%H %d' |
  grep --fixed-strings --invert-match \
       --file=<(git for-each-ref --format='%(*objectname)' refs/tags)

На английском языке это означает «дайте мне хэши для коммитов»достижимы в текущей ветви, за исключением тех, которые помечены ». Использование %(*objectname) в формате дает хэш тегированного коммита, а не самого объекта тега, что позволяет нам вычесть их из вывода git log, используя grep --invert-match (aka grep -v).

Добавление информации об декорировании (%d), чтобы помочь пользователю сориентироваться, добавляет некоторый риск ложных совпадений, но он уменьшается за счет использования полных имен объектов SHA-1.

1 голос
/ 15 апреля 2019
git rev-list master |
    while read sha1; do
        test -z "`git tag --points-at $sha1`" &&
           git --no-pager show -s --format="%h %s" $sha1
    done

Позвольте мне объяснить:

git rev-list master

Список идентификаторов коммитов SHA1 в ветке.

    while read sha1; do

Выполнить цикл для каждого SHA1.

        test -z "`git tag --points-at $sha1`" &&

Проверьте, нет ли тегов, указывающих на коммит.

            git --no-pager show -s --format="%h %s" $sha1

Если тегов нет, показывается сокращенный хеш коммита и первая строка сообщение коммита.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...