Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
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не уже была полностью объединена.
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Также есть решение с графическим интерфейсом. Просто 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
}
это на самом деле не работает. Если исходная ветка уже была объединена с целевой ветвью, а затем конечная ...
Ответ #6
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Используйте git merge-base .
Эта команда находит лучших 9X_git-commands общих предков между двумя коммитами. И если 9X_git-commands общий предок идентичен последней фиксации 9X_git-commands «ветки», то мы можем с уверенностью предположить, что 9X_git-commands эта «ветка» уже была объединена с мастером.
Вот шаги
Найти хэш последней фиксации в главной ветке
Найти хэш последней фиксации в «ветке»
Выполните команду git merge-base .
Если результат шага 3 такой же, как результат шага 2, значит, «ветвь» уже была объединена с мастером.
Здесь перечислены все удаленные ветки, за 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-commandsheads (т. Е. Ветки)
Список локальных веток, НЕ объединенных в удаленную ветку 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 ветки)
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Вот небольшое однострочное сообщение, которое 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 && :
Ответ на вопрос: Как я могу узнать, была ли ветка уже объединена с мастером?
Вот мои методы, когда мне нужно выяснить, была 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"
}