+read -r -a head_branches -p 'HEAD branch(es): '
+
+hb=( "${head_branches[@]/%/,}" )
+hb[-1]=${hb[-1]%,}
+if [ "${#hb[@]}" -gt 2 ]; then
+ hb[-2]=${hb[-2]/%,/ and}
+fi
+hbs=''
+if [ "${#hb[@]}" -gt 1 ]; then
+ hbs='s'
+fi
+
+printf -v subject 'manual merge of the BRANCH tree with the %s tree%s' \
+ "${hb[*]}" "$hbs"
+
+read -r -a merge_commits -p 'MERGE_HEAD commit(s): '
+for c in "${merge_commits[@]}"; do
+ if ! git rev-parse --verify "$c" >/dev/null; then
+ printf 'Unknown commit %s\n' "$c"
+ exit 1
+ fi
+ mc+=( "$(git log -1 --format='%h ("%s")' "$c")" )
+ readarray -t -O "${#cc[@]}" cc < <(git log -1 --format="$cformat" "$c" | sort -u)
+done
+mcs=''
+if [ "${#mc[@]}" -gt 1 ]; then
+ mcs='s'
+fi
+
+printf -v files ' %s\n' "$@"
+conf='a conflict'
+if [ "$#" -gt 1 ]; then
+ conf='conflicts'
+fi
+
+"$tools_dir/message_helper" "${branch[@]}" "$subject" "${cc[@]}" <<EOF