У меня есть git-репозиторий с несколькими ветками.
Как я могу узнать, какие ветви уже объединены с основной веткой?
git branch --merged master
списки веток объединены в мастер
git branch --merged
перечисляет ветви, объединенные в HEAD (т. е. верхушка текущей ветви)
git branch --no-merged
перечисляет ветви, которые не были объединены
По умолчанию это относится только к локальным филиалам. -a
Флаг будет показывать только локальные и удаленные ветви, а -r
флаг показывает только удаленные ветви.
git branch --merged
и затем удалил локальную и удаленную ветки.git branch -a --merged/no-merged
тоже работает, без создания локальной ветки отслеживания в процессе.git branch -r --merged/--no-merged
найти только удаленные ветки.--merged/--no-merged
после него берется необязательный аргумент коммита. По крайней мере, в моей версии git (1.9.1) добавление флага-a
или-r
после него приводит к фатальной ошибке. Добавьте-a
или-r
до--(no-)merged
.Вы можете использовать
git merge-base
команду, чтобы найти последний общий коммит между двумя ветвями. Если этот коммит совпадает с вашим главой ветви, тогда ветка была полностью объединена.источник
git branch -d
откажется от удаления ветви, которая не была объединена с текущей веткой. Не удаляя текущую ветку.Также есть решение с графическим интерфейсом. Просто введите
gitk --all
В новом окне приложения появится графическое представление всего вашего репо, где очень легко понять, была ли ветвь уже объединена или нет
источник
git
клиента. На Ubuntuapt-get install gitk
.brew install git-gui
бы попастьgitk
в командную строку.Я использую следующую функцию Bash, как:
git-is-merged develop feature/new-feature
источник
Использование
git merge-base <commit> <commit>
.Эта команда находит лучшего общего предка (ей) между двумя коммитами. И если общий предок идентичен последнему коммиту "ветки", то мы можем смело предположить, что эта "ветка" уже была объединена с мастером.
Вот шаги
git merge-base <commit-hash-step1> <commit-hash-step2>
.Более подробная информация о git merge-base https://git-scm.com/docs/git-merge-base .
источник
master
был ли слит вbranch
, а затем были добавлены еще 4 коммитовbranch
.git log -1 $(git merge-base base-branch feature-branch)
и если вы видитеfeature-branch
в выводе, то знаете, что они объединены?На тему очистки удаленных веток
В этом списке перечислены все удаленные ветви, за которыми следуют последние удаленные SHA.
Это полезно для определения того, какие удаленные ветви были объединены, но не удалены, а какие не были объединены и, следовательно, разрушаются.
Если вы используете 'tig' (это похоже на gitk, но на основе терминала), то вы можете
чтобы увидеть историю коммитов в ветке, не имея git checkout
источник
Чтобы проверить, какие ветви объединены в master, вы должны использовать эти команды:
git branch <flag[-r/-a/none]> --merged master
список всех веток, объединенных в мастер.git branch <flag[-r/-a/none]> --merged master | wc -l
Подсчитать количество всех веток, объединенных в мастер.Флаги являются:
-a
флаг - (все) показывает удаленные и локальные ветви-r
флаг - (удаленный) показывает только удаленные ветви<emptyFlag>
- показывает только локальные филиалынапример:
git branch -r --merged master
покажет вам все удаленные репозитории, объединенные в мастер.источник
Вот мои приемы, когда мне нужно выяснить, была ли слита ветвь, даже если она была перебазирована, чтобы соответствовать современной основной ветке, что является распространенным сценарием для ветвей функций.
Ни один из этих подходов не является надежным, но я нашел их полезными много раз.
1 Показать журнал для всех филиалов
Используя визуальный инструмент, такой как gitk или TortoiseGit, или просто git log с --all, просмотрите историю, чтобы увидеть все слияния с основной веткой. Вы должны быть в состоянии определить, была ли эта конкретная ветвь объектов объединена или нет.
2 Всегда удаляйте удаленную ветвь при слиянии в ветке объектов
Если у вас есть хорошая привычка всегда удалять как локальную, так и удаленную ветви при объединении в ветви функций, то вы можете просто обновить и удалить удаленные ветки на другом компьютере, и ветви функций исчезнут.
Чтобы не забыть сделать это, я уже использую расширения потока git (редакция AVH) для локального создания и объединения моих функциональных веток, поэтому я добавил следующую ловушку git flow, чтобы спросить меня, хочу ли я также автоматически удалить удаленную ветку.
Пример создания / завершения ветки объектов
.git / Крючки / пост-флоу-функция-отделка
3 Поиск по сообщению фиксации
Если вы не всегда удаляете удаленную ветку, вы все равно можете искать похожие коммиты, чтобы определить, была ли ветка объединена или нет. Подводный камень здесь в том случае, если удаленная ветвь была переназначена до неузнаваемого, такого как фиксация при сжатии или изменение сообщений фиксации.
Примеры команд на главной ветке:
В моем конфиге bash .profile
источник
git log --all --color --graph --decorate --topo-order --date=relative --abbrev-commit --pretty=format:"%C(green)%h %C(red bold)[%<(14)%ad] %Creset%s%Cred%d%C(blue) [%an]"
git log
вы можете добавить--merges
только показать коммитов слияния. stackoverflow.com/a/25986615/134761Вот небольшая строка, которая позволит вам узнать, содержит ли ваша текущая ветвь данные из удаленной ветки origin / master или нет:
Я сталкивался с этим вопросом при работе над функциональной веткой и часто хотел убедиться, что у меня есть самая последняя работа, включенная в мою отдельную рабочую ветку.
Чтобы обобщить этот тест, я добавил следующий псевдоним в мой ~ / .gitconfig:
Тогда я могу позвонить:
чтобы проверить, если я в курсе.
источник