Как я могу узнать, была ли ветка уже объединена с мастером?
У меня есть репозиторий git с несколькими 9X_git ветвями.
Как узнать, какие ветки уже объединены 9X_git-commands в основную ветку?
Ответ #1
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
git branch --merged master
перечисляет ветки, объединенные в главную
git branch --merged
перечисляет 9X_git ветки, объединенные в HEAD (т.е. вершину текущей 9X_git ветки)
git branch --no-merged
перечисляет ветки, которые не были 9X_git объединены
По умолчанию это относится только 9X_git к локальным филиалам. Флаг -a
отображает как 9X_git-commands локальные, так и удаленные ветки, а флаг 9X_git -r
показывает только удаленные ветки.
- Очевидно, `git branch -a --merged / no-merged` также работает, без со ...
Ответ #2
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Вы можете использовать команду git merge-base
, чтобы найти 9X_git-commands последнюю общую фиксацию между двумя ветвями. Если 9X_git-commands этот коммит совпадает с заголовком вашей 9X_git-commands ветки, значит, ветка была полностью объединена.
Обратите 9X_git-commands внимание, что
git branch -d
уже делает подобные вещи, потому 9X_git что он откажется удалить ветку, которая 9X_git-commands не уже была полностью объединена.
- @AlexanderMills: `git branch -d` откажется удалить ветку, которая не была объединена с текущей веткой. Не у ...
Ответ #3
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Чтобы проверить, какие ветки объединены 9X_git-commands в мастер, вы должны использовать следующие 9X_git команды:
git branch --merged master
список всех веток, объединенных в главную.git branch --merged master | wc -l
подсчитать количество всех ветвей, объединенных в мастер.
Флаги:
-a
флаг - (все), показывающий удаленные и локальные ветки.-r
флаг - (удаленный) показывает только удаленные ветки- отображение только локальных веток
например: git branch -r --merged master
покажет вам все удаленные 9X_git репозитории, объединенные в главный.
Ответ #4
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Также есть решение с графическим интерфейсом. Просто 9X_git-commands введите
gitk --all
Новое окно приложения предложит графическое 9X_git представление всего вашего репо, где очень 9X_git-commands легко понять, была ли ветка уже объединена 9X_git-commands или нет
- Что для ясности, требует установки приложения, которое не является частью клиента `gi ...
Ответ #5
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Я использую следующую функцию bash, например: git-is-merged develop feature/new-feature
git-is-merged () { merge_destination_branch=$1 merge_source_branch=$2 merge_base=$(git merge-base $merge_destination_branch $merge_source_branch) merge_source_current_commit=$(git rev-parse $merge_source_branch) if [[ $merge_base = $merge_source_current_commit ]] then echo $merge_source_branch is merged into $merge_destination_branch return 0 else echo $merge_source_branch is not merged into $merge_destination_branch return 1 fi }
9X_git-commands
- это на самом деле не работает. Если исходная ветка уже была объединена с целевой ветвью, а затем конечная ...
Ответ #6
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Используйте git merge-base
.
Эта команда находит лучших 9X_git-commands общих предков между двумя коммитами. И если 9X_git-commands общий предок идентичен последней фиксации 9X_git-commands «ветки», то мы можем с уверенностью предположить, что 9X_git-commands эта «ветка» уже была объединена с мастером.
Вот шаги
- Найти хэш последней фиксации в главной ветке
- Найти хэш последней фиксации в «ветке»
- Выполните команду
git merge-base
. - Если результат шага 3 такой же, как результат шага 2, значит, «ветвь» уже была объединена с мастером.
Дополнительная 9X_git информация о git merge-base https://git-scm.com/docs/git-merge-base.
- Я думаю, это скажет вам, только если советы будут объединены. Например, это не скажет вам, был ли `master` объединен с` branch`, ...
Ответ #7
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
По теме очистки удаленных веток
git branch -r | xargs -t -n 1 git branch -r --contains
Здесь перечислены все удаленные ветки, за 9X_git которыми следует, в каких удаленных ветвях 9X_git находятся их последние SHA.
Это полезно для 9X_git-commands определения того, какие удаленные ветки 9X_git были объединены, но не удалены, а какие 9X_git-commands не были объединены и, таким образом, распадаются.
Если 9X_git вы используете 'tig' (похоже на gitk, но 9X_git на основе терминала), вы можете
tig origin/feature/someones-decaying-feature
чтобы увидеть 9X_git-commands историю коммитов ветки без использования 9X_git git checkout
- Молодец этот человек! Очень полезно, когда вы понимаете, что он на самом деле отображает! Приложение GitHub должно включить это в визуальное отображение ваших веток, а не в а ...
Ответ #8
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Я использую git for-each-ref, чтобы получить список ветвей, которые 9X_git-commands либо объединены, либо не объединены в данную 9X_git удаленную ветку (например, origin/integration
)
Перебрать все 9X_git-commands ссылки, соответствующие , и показать их в соответствии с заданным после сортировки в соответствии с заданным набором .
Примечание: замените origin/integration
на integration
, если вы предпочитаете использовать git pull
вместо git fetch
.
Список локальных веток, объединенных в удаленную ветку origin/integration
git for-each-ref --merged=origin/integration --format="%(refname:short)" refs/heads/ # ^ ^ ^ # A B C branch1 branch2 branch3 branch4
A: возьмите только 9X_git-commands ветки, объединенные в удаленную ветку origin/integration
B: напечатайте 9X_git название ветки
C: смотрите только ссылки 9X_git-commands heads
(т. Е. Ветки)
Список локальных веток, НЕ объединенных в удаленную ветку origin/integration
git for-each-ref --no-merged=origin/integration --format="%(committerdate:short) %(refname:short)" --sort=committerdate refs/heads # ^ ^ ^ ^ # A B C D 2020-01-14 branch10 2020-01-16 branch11 2020-01-17 branch12 2020-01-30 branch13
A: возьмите только ветки, НЕ 9X_git-commands объединенные в удаленную ветку origin/integration
B: вывести 9X_git-commands имя ветки вместе с датой последней фиксации 9X_git
C: отсортировать вывод по дате фиксации 9X_git-commands
D: смотрите только на heads
ссылки (то есть 9X_git-commands ветки)
Ответ #9
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Вот небольшое однострочное сообщение, которое 9X_git сообщит вам, включает ли ваша текущая ветвь 9X_git-commands данные из удаленной исходной / главной ветки 9X_git или нет:
$ git fetch && git branch -r --merged | grep -q origin/master && echo Incorporates origin/master || echo Out of date from origin/master
Я столкнулся с этим вопросом, когда 9X_git работал над функциональной веткой, и часто 9X_git-commands хотел убедиться, что самая последняя работа 9X_git-commands включена в мою отдельную рабочую ветку.
Чтобы 9X_git обобщить этот тест, я добавил в свой ~ / .gitconfig 9X_git следующий псевдоним:
[alias] current = !git branch -r --merged | grep -q $1 && echo Incorporates $1 || echo Out of date from $1 && :
Тогда я могу позвонить:
$ git current origin/master
, чтобы 9X_git проверить, действую ли я.
Ответ #10
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Вот мои методы, когда мне нужно выяснить, была 9X_git-commands ли объединена ветка, даже если она могла 9X_git быть перебазирована, чтобы соответствовать 9X_git нашей основной ветке, что является обычным 9X_git сценарием для ветвей функций.
Ни один из 9X_git-commands этих подходов не является надежным, но я 9X_git-commands много раз находил их полезными.
1 Показать журнал для всех веток
Используя 9X_git визуальный инструмент, такой как gitk или 9X_git-commands TortoiseGit, или просто git log с параметром 9X_git --all, просмотрите историю, чтобы увидеть 9X_git-commands все слияния с основной веткой. Вы сможете 9X_git определить, была ли объединена эта конкретная 9X_git-commands ветка функции.
2 Всегда удаляйте удаленную ветку при объединении в функциональную ветку
Если у вас есть хорошая привычка 9X_git-commands всегда удалять как локальную, так и удаленную 9X_git-commands ветвь при объединении в функциональную ветку, вы 9X_git можете просто обновить и удалить удаленные 9X_git-commands блоки на другом компьютере, и функциональные 9X_git-commands ветки исчезнут.
Чтобы не забыть об этом, я 9X_git уже использую git flow extensions (AVH edition) для локального создания и 9X_git объединения веток функций, поэтому я добавил 9X_git следующий обработчик потока git, чтобы спросить 9X_git-commands меня, хочу ли я также автоматически удалить 9X_git удаленную ветку.
Пример создания / завершения функциональной ветви
554 Andreas:MyRepo(develop)$ git flow start tmp Switched to a new branch 'feature/tmp' Summary of actions: - A new branch 'feature/tmp' was created, based on 'develop' - You are now on branch 'feature/tmp' Now, start committing on your feature. When done, use: git flow feature finish tmp 555 Andreas:MyRepo(feature/tmp)$ git flow finish Switched to branch 'develop' Your branch is up-to-date with 'if/develop'. Already up-to-date. [post-flow-feature-finish] Delete remote branch? (Y/n) Deleting remote branch: origin/feature/tmp. Deleted branch feature/tmp (was 02a3356). Summary of actions: - The feature branch 'feature/tmp' was merged into 'develop' - Feature branch 'feature/tmp' has been locally deleted - You are now on branch 'develop' 556 Andreas:ScDesktop (develop)$
.git / hooks / post-flow-feature-finish
NAME=$1 ORIGIN=$2 BRANCH=$3 # Delete remote branch # Allows us to read user input below, assigns stdin to keyboard exec < /dev/tty while true; do read -p "[post-flow-feature-finish] Delete remote branch? (Y/n) " yn if [ "$yn" = "" ]; then yn='Y' fi case $yn in [Yy] ) echo -e "\e[31mDeleting remote branch: $2/$3.\e[0m" || exit "$?" git push $2 :$3; break;; [Nn] ) echo -e "\e[32mKeeping remote branch.\e[0m" || exit "$?" break;; * ) echo "Please answer y or n for yes or no.";; esac done # Stop reading user input (close STDIN) exec <&- exit 0
3 Поиск по сообщению фиксации
Если вы не всегда удаляете 9X_git-commands удаленную ветку, вы все равно можете искать 9X_git-commands похожие коммиты, чтобы определить, была 9X_git ли ветка объединена или нет. Ловушка здесь 9X_git-commands заключается в том, что удаленная ветка была 9X_git перебазирована до неузнаваемости, например, сжатие 9X_git коммитов или изменение сообщений фиксации.
- Получить и обрезать все пульты дистанционного управления.
- Найти сообщение о последней фиксации в функциональной ветке
- Посмотрите, можно ли найти фиксацию с таким же сообщением в главной ветке
Примеры 9X_git-commands команд в главной ветке:
gru gls origin/feature/foo glf "my message"
В моей конфигурации bash .profile
alias gru='git remote update -p' alias glf=findCommitByMessage findCommitByMessage() { git log -i --grep="$1" }
Ответ #11
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Чтобы проверить, объединена ли исходная 9X_git-commands ветка с основной веткой, можно использовать 9X_git следующую команду bash:
git merge-base --is-ancestor
-
30
-
19
-
17
-
29
-
10
-
25
-
8
-
19
-
38
-
5
-
9
-
10
-
16
-
4
-
38
-
40
-
25
-
12
-
24
-
14
-
27
-
4
-
18
-
36
-
27
-
17
-
14
-
17
-
31
-
32
-
9
-
21
-
15
-
27
-
7
-
7
-
33
-
12
-
8
-
11
-
7
-
5
-
17
-
23
-
7
-
11
-
10
-
6
-
10
-
25