В случае
в лучшем случае (поскольку мастер может иметь другие новые коммиты) "удалить, если мастер содержит коммиты, которые ~ равны коммитам этой ветви с момента его создания" (конечно, могут быть проблемы с битом "равный" вв некоторых случаях, но для более простых ..)
git rebase master oldbranch
git checkout master
git branch -d oldbranch
должен сделать это, rebase идентифицирует и игнорирует коммиты, которые вы уже выбрали, и, если это все из них master
иoldbranch
будет таким же коммитом, т.е. oldbranch уже объединен и удаление успешно завершено.
Но case
- в худшем случае "delete if diff между текущимветвь и мастер пустые "
различимы, можно получить тот же результат, но с разными отдельными шагами, где только совокупный эффект совпадает.Вопрос в том, как вы хотите, чтобы история ваших результатов была похожа?Вы должны использовать разные команды, чтобы получить разные результаты.
Итак, самая простая последовательность, которую я могу придумать, чтобы поразить всех ваших желаний, это
if [[ `git rev-parse master:` = `git rev-parse oldbranch:` ]]; then
echo '`oldbranch` tip identical to master tip, not bothering with rebase, deleting'
git checkout master &&
git branch -D oldbranch
else
git rebase master oldbranch &&
git checkout master &&
git branch -d oldbranch && echo oldbranch completely merged, deleting
fi
, и случай, который здесь не обрабатывается, таков:две подсказки ветви пришли к частично перекрывающимся совокупным различиям и поделили изменения по-разному, и для этого вам просто нужно решить, какая историческая запись будет наиболее полезной.Я бы просто слился.