Есть ли скрипт для вывода списка созданных мной веток git?

Я знаю, что ветки на самом деле не хранят информацию о создателе — они просто указатель на фиксацию.

Моя цель состоит в том, чтобы иметь возможность очистить мои старые ветки, которые были объединены обратно в основную ветку, и перечислить ветки, в которых это тоже не было сделано. (уборка).

Это отличается от «поиска неслитых ветвей», потому что я также хочу найти объединенные ветки, и я хочу сделать это по автору.

У меня вопрос: Есть ли сценарий для вывода списка созданных мной веток git?


person hawkeye    schedule 16.03.2016    source источник
comment
Название и основная часть вашего вопроса кажутся противоречащими друг другу: хотите ли вы получить ветки, созданные вами (что, я думаю, вы не можете), или вы хотите перечислить неслитые ветки? Или комбинация того и другого?   -  person morxa    schedule 16.03.2016
comment
Возможный дубликат git, находящего необъединенные ветки   -  person gzh    schedule 16.03.2016
comment
Я хочу оба. Я хочу, чтобы все ветки, созданные мной, были объединены или не объединены.   -  person hawkeye    schedule 16.03.2016


Ответы (5)


Эта команда выводит список всех веток и их имена авторов.

git for-each-ref --format=' %(authorname) %09 %(refname)' --sort=authorname 

Если вы используете github, вы также можете посетить https://github.com/author/repo/branches/yours, чтобы получить все ваши ветки

Если вы хотите просто удалить все уже объединенные ветки, вы можете использовать команду

git branch --merged | grep -v "\*" | grep -v master | grep -v dev | xargs -n 1 git branch -d

Дополнительные сведения о git for-each-ref см. здесь.

person SachinSunny    schedule 16.03.2016
comment
Есть ли лучший способ, кроме как через grep, ограничить его только моим? - person hawkeye; 16.03.2016
comment
Это не отвечает на вопрос. В ОП прямо указывается вопрос: Мой вопрос: есть ли сценарий для вывода списка созданных мной веток git? этого ответа недостаточно - person Caleb Adams; 07.07.2017
comment
Если вы добавите --sort=authorname к приведенной выше команде, вы можете сгруппировать свои ветки вместе. В противном случае я не уверен, что вы можете перечислить ветки, созданные только вами. - person SachinSunny; 13.07.2017
comment
Здесь перечислены ветви, но не их авторы. Они сортируются по автору последней фиксации каждой ветки, а не по автору ветки. - person Janez Lukan; 02.03.2018
comment
У меня ничего не отображалось, поэтому я изменил его на: git for-each-ref --format="%(if)%(authorname)%(then)%(authorname)%(end): %(refname)" --sort=authorname идея пришла из git- scm.com/docs/git-for-each-ref - person JohnnyFun; 04.09.2020
comment
git for-each-ref --format=' %(имя автора) %09 %(имя ссылки)' --sort=имя автора | grep 'укажите здесь имя пользователя', чтобы получить имя пользователя git config user.name. - person Ashok R; 08.06.2021
comment
Можете ли вы опубликовать рабочий пример ссылки https://github.com/author/repo/branches/yours? - person bobobobo; 27.07.2021

Немного поздно для вечеринки здесь, но это лучший результат в Google при поиске «список веток git для автора».

Однострочник для поиска удаленных веток в git:

git branch -r | xargs -L1 git --no-pager show -s --oneline --author="$(git config user.name)"

git branch -r — список всех удаленных веток.

xargs -L1 — преобразует результат предыдущей команды в аргументы для следующей команды.

git show — git show, показывает различные виды объектов в git. В этом случае он покажет последнюю фиксацию в каждой ветке с полной разницей.

Флаг -s подавляет вывод различий.

Флаг --oneline объединяет информацию о коммите в одну строку.

Флаг --author="$(git config user.name)" показывает коммиты только для текущего пользователя git.

Флаг --no-pager запускает git без пейджера. Без этого флага каждая фиксация результата будет открыта в своем собственном экземпляре пейджера, который может работать в зависимости от вашего пейджера.

Окончательный результат будет выглядеть примерно так:

efbd5d738b (origin/feature/A) commit feature A
297e83d9a6 (origin/feature/B) commit feature B
951f6638de (origin/test/A) commit test A
307d16741b (origin/master) latest master commit

Имейте в виду, что список будет содержать ветки master и development, если данный автор является последним коммитером в этих ветках.

person Skillzore    schedule 03.02.2020
comment
Интересно, что это очень медленно. Я предполагаю, потому что есть реальная связь с пультом. Я ожидаю, что это будет молниеносно, если вы сделаете извлечение для всего репозитория, разве все необходимые данные не будут локальными? - person gravidThoughts; 11.02.2020
comment
Горячий черт! Не говоря уже о производительности, отличный ответ и подробное объяснение. Это то, что я люблю. - person reergymerej; 12.02.2020
comment
Попытка изучить медленную производительность. Похоже, что главными виновниками являются флаги --author и -s. Без этих флагов скрипт отзывчивый, но распечатка результата в больших репозиториях занимает некоторое время. Не могу найти ничего в Интернете, чтобы предположить, почему они медленные или более быстрая альтернатива. Посмотрю, может быть, где-нибудь сообщать о скорости этих флагов мейнтейнерам git. У меня такое ощущение, что они только подавляют некоторый вывод. Кажется, они по-прежнему выполняют всю обработку для всех веток и всех различий в фоновом режиме. - person Skillzore; 17.02.2020
comment
@Skillzore Ваша работа оценена по достоинству! Если вы сделаете какие-либо открытия, пожалуйста, обновите свой ответ. Между тем, это очень помогло, даже если это было медленно;). - person gravidThoughts; 20.02.2020
comment
Мой вывод включал сообщение об ошибке для извлеченной ветки в источнике: fatal: unrecognized argument: ->. Это произошло потому, что git branch -r распечатал origin/HEAD -> origin/master для этой ветки. Я полагаю, вы могли бы избежать этого, пройдя через grep -v -- '->'. - person Noumenon; 09.07.2020
comment
@Noumenon Я тоже. Исправил это, добавив формат к первому термину: git branch -r --format='%(refname)' | ... - person Rhubarb; 11.08.2020

Попробовал ответ от SachinSunny выше, изменил его, чтобы он был

git for-each-ref --sort=authorname --format "%(authorname) %(refname)"

Это дает автора и ветку, как локальную, так и удаленную, в порядке последнего автора.

person Yunhua    schedule 18.08.2020

В качестве небольшого сокращения ответа SachinSunny выше вы можете использовать функции регулярного выражения grep для выполнения более простой команды:

git branch --merged | grep -Pv "\*|master|dev" | xargs -n 1 git branch -d
person Eric    schedule 14.07.2016

Что касается Git версии 2.23, вы можете просто ввести:

git branch

и это даст вам список локального списка филиалов. Помните, что это также будет включать master и другие, которые вы объединили. Чтобы отфильтровать эти каналы, результат с помощью egrep -v "(^\*|master|development)

Если вы хотите включить пульты, вы можете сделать: git for-each-ref --format=' %(authorname) %09 %(refname)' --sort=authorname | egrep -v "(^\*|master|development)"| grep 'Your Name'

на удаление, труба xargs git branch -D

person Paulo Fidalgo    schedule 20.11.2019