Вот мои приемы, когда мне нужно выяснить, была ли объединена ветвь, даже если она могла быть перебазирована, чтобы соответствовать современной основной ветке, что является распространенным сценарием для ветвей функций.
Ни один из этих подходов не является надежным, но я нашел их полезными много раз.
1 Показать журнал для всех филиалов
Используя визуальный инструмент, такой как gitk или TortoiseGit, или просто git log с --all, просмотрите историю, чтобы увидеть все слияния с основной веткой. Вы должны быть в состоянии определить, была ли эта конкретная ветвь объектов объединена или нет.
2 Всегда удалять удаленную ветвь при объединении в ветвь функций
Если у вас есть хорошая привычка всегда удалять как локальную, так и удаленную ветку, когда вы объединяете ветку функций, вы можете просто обновить и удалить удаленные ветки на другом компьютере, и ветви функций исчезнут.
Чтобы не забыть сделать это, я уже использую расширения потока git (версия AVH) для локального создания и объединения моих функциональных веток, поэтому я добавил следующую ловушку потока мерзавца, чтобы спросить меня, если я тоже хочу автоматически удалить удаленную ветку.
Пример создания / завершения ветви элемента
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 Поиск по сообщению фиксации
Если вы не всегда удаляете удаленную ветвь, вы все равно можете искать похожие коммиты, чтобы определить, была ли ветвь объединена или нет. Подводный камень здесь в том случае, если удаленная ветвь была переведена в нераспознаваемое состояние, такое как фиксация при сжатии или изменение сообщений фиксации.
- Выбрать и удалить все пульты
- Найти сообщение о последнем коммите в ветви функций
- Проверьте, можно ли найти коммит с тем же сообщением в главной ветке
Пример команд в основной ветке:
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"
}