У меня есть репозиторий Git со многими ветками, некоторые из которых уже объединены, а некоторые нет. Поскольку число ветвей довольно велико, как я могу определить, какие ветки еще не были объединены? Я хотел бы избежать необходимости выполнять слияние и повторное объединение осьминога, которые уже были объединены.
Найти неразделенные ветки Git?
Ответ 1
Попробуйте следующее:
git branch --merged master
Он делает то, что он говорит на олове (списки ветвей, которые были объединены в master
). Вы также можете потянуть инверсию с помощью:
git branch --no-merged master
Если вы не указали master
, например...
git branch --merged
то он покажет вам ветки, которые были объединены в текущий HEAD
(поэтому, если вы находитесь на master
, это эквивалентно первой команде; если вы находитесь на foo
, это эквивалентно git branch --merged foo
).
Вы также можете сравнить ветки восходящего потока, указав флаг -r
и ref для проверки, который может быть локальным или удаленным:
git branch -r --no-merged origin/master
Ответ 2
Вы также можете использовать параметр -r для отображения удаленных ветвей, которые не были объединены в master:
git branch -r --merged master
git branch -r --no-merged
Ответ 3
Если ветка уже слита, слияние ее снова ничего не сделает. Поэтому вам не нужно беспокоиться о "повторной слиянии" ветвей, которые уже объединены.
Чтобы ответить на ваш вопрос, вы можете просто выпустить
git branch --merged
чтобы увидеть объединенные ветки или
git branch --no-merged
чтобы увидеть несвязанные ветки. Текущая ветка подразумевается, но вы можете указать другие ветки, если хотите.
git branch --no-merged integration
покажет вам ветки, которые еще не объединены в ветвь integration
.
Ответ 4
Ниже script найдет все ветки origin/*
, которые опережают текущую ветвь
#!/bin/bash
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
echo -e "Current branch: \e[94m$CURRENT_BRANCH\e[0m"
echo ''
git branch -a | grep remotes/origin/ | while read LINE
do
CMD="git diff --shortstat remotes/origin/${CURRENT_BRANCH}...${LINE}"
if $CMD | grep ' file' > /dev/null; then
echo -e "\e[93m$LINE\e[0m" | sed 's/remotes\/origin\///'
$CMD
echo ''
fi
done
Ответ 5
Below script will fetch you unmerged branches and write results in .xls file
#!/usr/bin/env bash
echo "getting list of unmerged_branches from the remote"
file_name=unmerged_branches.xls'enter code here'
current_time=$(date "+%Y.%m.%d-%H.%M.%S")
for branch in 'git branch -r --no-merged | grep -v HEAD';
do echo -e 'git show --format="%cd \\t%cr \\t%ae" $branch | head -n 1' \\t$branch;
done | sort -r >> $current_time.$file_name
echo "result is writtein in ";
echo $current_time.$file_name;