Получение имени ветви слияния для фиксации слияния

#git #github

#git #github

Вопрос:

Git — это настолько хорошо написанная часть программного обеспечения, что вы можете потратить много времени на его использование, не понимая, что происходит.

Я пытаюсь получить имя ветви, которая была объединена с основной ветвью совсем недавно, и, похоже, у меня ничего не получается с git log, git show и т.д.

У Github есть история имен ветвей, когда я просматриваю коммиты для master, но мне интересно, отслеживает ли это github дополнительно, а не то, к чему я могу получить доступ с помощью git. Любая помощь была бы высоко оценена!

Комментарии:

1. За исключением сообщения о слиянии по умолчанию ( merge branch B или merge branch B into T ), Git нигде не сохраняет эту информацию. Имена ветвей являются подвижными и могут быть удалены, поэтому, если имя было перемещено или удалено, искать нечего.

2. Ветви — это просто имена. Слияния включают только коммиты, даже если (и да, метафора может сбивать с толку) мы часто используем имена ветвей для ссылки на них.

3. Я вижу, таким образом, единственный способ, которым я могу различать классы слияний, — это добавить некоторый идентификатор в описание? Потому что я могу получить эту строку, например, из журнала git.

4. Зачем вам нужно знать имя ветви, которое использовалось изначально?

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

Ответ №1:

Как уже было сказано, эта информация не записывается.

Вы могли бы рассмотреть post-merge хук, подобный этому, который бы:

  • получение ветви, которая была только что объединена (через git reflog )
  • используйте git notes add для того, чтобы добавить в текущую фиксацию слияния нужную информацию.
    Таким образом, нет необходимости изменять описание / сообщение о фиксации слияния.

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

Ответ №2:

Как упоминал @torek в комментарии, вы можете использовать сообщение внутри самой фиксации слияния.

 #!/bin/bash
commit_subject=$(git log -1 --pretty=format:%s)
echo Commit subject: $commit_subject

regex='Merge pull request #[0-9]  from . /(. )$'
[[ $commit_subject =~ $regex ]]
branch_name=${BASH_REMATCH[1]}
echo Merged branch: $branch_name
  

Пример вывода:

 Commit subject: Merge pull request #2574 from RepoName/BranchName
Merged branch: BranchName