#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