diff --git a/builtin/branch.c b/builtin/branch.c
index 407517ba68..ca472436f0 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -159,17 +159,13 @@ static int branch_merged(int kind, const char *name,
 	 * any of the following code, but during the transition period,
 	 * a gentle reminder is in order.
 	 */
-	if ((head_rev != reference_rev) &&
-	    in_merge_bases(rev, head_rev) != merged) {
-		if (merged)
-			warning(_("deleting branch '%s' that has been merged to\n"
-				"         '%s', but not yet merged to HEAD."),
-				name, reference_name);
-		else
-			warning(_("not deleting branch '%s' that is not yet merged to\n"
+	if ((head_rev != reference_rev) && in_merge_bases(rev, head_rev) != merged)
+		warning(merged
+			? _("deleting branch '%s' that has been merged to\n"
+				"         '%s', but not yet merged to HEAD.")
+			: _("not deleting branch '%s' that is not yet merged to\n"
 				"         '%s', even though it is merged to HEAD."),
 				name, reference_name);
-	}
 	free(reference_name_to_free);
 	return merged;
 }
@@ -179,16 +175,12 @@ static int check_branch_commit(const char *branchname, const char *refname,
 			       int kinds, int force)
 {
 	struct commit *rev = lookup_commit_reference(the_repository, oid);
-	if (!force && !rev) {
-		error(_("Couldn't look up commit object for '%s'"), refname);
-		return -1;
-	}
-	if (!force && !branch_merged(kinds, branchname, rev, head_rev)) {
-		error(_("The branch '%s' is not fully merged.\n"
+	if (!force && !rev)
+		return error(_("couldn't look up commit object for '%s'"), refname);
+	if (!force && !branch_merged(kinds, branchname, rev, head_rev))
+		return error(_("the branch '%s' is not fully merged\n"
 		      "If you are sure you want to delete it, "
-		      "run 'git branch -D %s'."), branchname, branchname);
-		return -1;
-	}
+		      "run 'git branch -D %s'"), branchname, branchname);
 	return 0;
 }
 
@@ -197,7 +189,7 @@ static void delete_branch_config(const char *branchname)
 	struct strbuf buf = STRBUF_INIT;
 	strbuf_addf(&buf, "branch.%s", branchname);
 	if (git_config_rename_section(buf.buf, NULL) < 0)
-		warning(_("Update of config-file failed"));
+		warning(_("update of config-file failed"));
 	strbuf_release(&buf);
 }
 
@@ -238,7 +230,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
 	if (!force) {
 		head_rev = lookup_commit_reference(the_repository, &head_oid);
 		if (!head_rev)
-			die(_("Couldn't look up commit object for HEAD"));
+			die(_("couldn't look up commit object for HEAD"));
 	}
 
 	for (i = 0; i < argc; i++, strbuf_reset(&bname)) {
@@ -252,7 +244,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
 		if (kinds == FILTER_REFS_BRANCHES) {
 			const char *path;
 			if ((path = branch_checked_out(name))) {
-				error(_("Cannot delete branch '%s' "
+				error(_("cannot delete branch '%s' "
 					"checked out at '%s'"),
 				      bname.buf, path);
 				ret = 1;
@@ -267,8 +259,8 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
 					&oid, &flags);
 		if (!target) {
 			error(remote_branch
-			      ? _("remote-tracking branch '%s' not found.")
-			      : _("branch '%s' not found."), bname.buf);
+			      ? _("remote-tracking branch '%s' not found")
+			      : _("branch '%s' not found"), bname.buf);
 			ret = 1;
 			continue;
 		}
@@ -299,8 +291,8 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
 			char *refname = name + branch_name_pos;
 			if (!quiet)
 				printf(remote_branch
-					? _("Deleted remote-tracking branch %s (was %s).\n")
-					: _("Deleted branch %s (was %s).\n"),
+					? _("Deleted remote-tracking branch '%s' (was %s)\n")
+					: _("Deleted branch '%s' (was %s)\n"),
 					name + branch_name_pos, describe_ref);
 
 			delete_branch_config(refname);
@@ -501,11 +493,11 @@ static void reject_rebase_or_bisect_branch(const char *target)
 			continue;
 
 		if (is_worktree_being_rebased(wt, target))
-			die(_("Branch %s is being rebased at %s"),
+			die(_("branch '%s' is being rebased at '%s'"),
 			    target, wt->path);
 
 		if (is_worktree_being_bisected(wt, target))
-			die(_("Branch %s is being bisected at %s"),
+			die(_("branch '%s' is being bisected at '%s'"),
 			    target, wt->path);
 	}
 
@@ -520,13 +512,6 @@ static void copy_or_rename_branch(const char *oldname, const char *newname, int
 	const char *interpreted_newname = NULL;
 	int recovery = 0;
 
-	if (!oldname) {
-		if (copy)
-			die(_("cannot copy the current branch while not on any."));
-		else
-			die(_("cannot rename the current branch while not on any."));
-	}
-
 	if (strbuf_check_branch_ref(&oldref, oldname)) {
 		/*
 		 * Bad name --- this could be an attempt to rename a
@@ -535,15 +520,13 @@ static void copy_or_rename_branch(const char *oldname, const char *newname, int
 		if (ref_exists(oldref.buf))
 			recovery = 1;
 		else
-			die(_("Invalid branch name: '%s'"), oldname);
+			die(_("no branch named '%s'"), oldname);
 	}
 
-	if ((copy || strcmp(head, oldname)) && !ref_exists(oldref.buf)) {
-		if (copy && !strcmp(head, oldname))
-			die(_("No commit on branch '%s' yet."), oldname);
-		else
-			die(_("No branch named '%s'."), oldname);
-	}
+	if ((copy || strcmp(head, oldname)) && !ref_exists(oldref.buf))
+		die(copy && !strcmp(head, oldname)
+			? _("no commit on branch '%s' yet")
+			: _("no branch named '%s'"), oldname);
 
 	/*
 	 * A command like "git branch -M currentbranch currentbranch" cannot
@@ -561,32 +544,25 @@ static void copy_or_rename_branch(const char *oldname, const char *newname, int
 		BUG("expected prefix missing for refs");
 	}
 
-	if (copy)
-		strbuf_addf(&logmsg, "Branch: copied %s to %s",
-			    oldref.buf, newref.buf);
-	else
-		strbuf_addf(&logmsg, "Branch: renamed %s to %s",
-			    oldref.buf, newref.buf);
+	strbuf_addf(&logmsg, copy
+		? "Branch: copied %s to %s"
+		: "Branch: renamed %s to %s", oldref.buf, newref.buf);
 
 	if (!copy &&
 	    (!head || strcmp(oldname, head) || !is_null_oid(&head_oid)) &&
 	    rename_ref(oldref.buf, newref.buf, logmsg.buf))
-		die(_("Branch rename failed"));
+		die(_("branch rename failed"));
 	if (copy && copy_existing_ref(oldref.buf, newref.buf, logmsg.buf))
-		die(_("Branch copy failed"));
+		die(_("branch copy failed"));
 
-	if (recovery) {
-		if (copy)
-			warning(_("Created a copy of a misnamed branch '%s'"),
+	if (recovery)
+		warning(copy ? _("created a copy of a misnamed branch '%s'")
+			     : _("renamed a misnamed branch '%s' away"),
 				interpreted_oldname);
-		else
-			warning(_("Renamed a misnamed branch '%s' away"),
-				interpreted_oldname);
-	}
 
 	if (!copy &&
 	    replace_each_worktree_head_symref(oldref.buf, newref.buf, logmsg.buf))
-		die(_("Branch renamed to %s, but HEAD is not updated!"), newname);
+		die(_("branch renamed to '%s', but HEAD is not updated"), newname);
 
 	strbuf_release(&logmsg);
 
@@ -595,9 +571,9 @@ static void copy_or_rename_branch(const char *oldname, const char *newname, int
 	strbuf_addf(&newsection, "branch.%s", interpreted_newname);
 	strbuf_release(&newref);
 	if (!copy && git_config_rename_section(oldsection.buf, newsection.buf) < 0)
-		die(_("Branch is renamed, but update of config-file failed"));
+		die(_("branch is renamed, but update of config-file failed"));
 	if (copy && strcmp(oldname, newname) && git_config_copy_section(oldsection.buf, newsection.buf) < 0)
-		die(_("Branch is copied, but update of config-file failed"));
+		die(_("branch is copied, but update of config-file failed"));
 	strbuf_release(&oldsection);
 	strbuf_release(&newsection);
 }
@@ -715,11 +691,11 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 
 	head = resolve_refdup("HEAD", 0, &head_oid, NULL);
 	if (!head)
-		die(_("Failed to resolve HEAD as a valid ref."));
+		die(_("failed to resolve HEAD as a valid ref"));
 	if (!strcmp(head, "HEAD"))
 		filter.detached = 1;
 	else if (!skip_prefix(head, "refs/heads/", &head))
-		die(_("HEAD not found below refs/heads!"));
+		die(_("HEAD not found below refs/heads"));
 
 	argc = parse_options(argc, argv, prefix, options, builtin_branch_usage,
 			     0);
@@ -740,9 +716,11 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 
 	if (recurse_submodules_explicit) {
 		if (!submodule_propagate_branches)
-			die(_("branch with --recurse-submodules can only be used if submodule.propagateBranches is enabled"));
+			die(_("branch with --recurse-submodules can only be "
+				"used if submodule.propagateBranches is enabled"));
 		if (noncreate_actions)
-			die(_("--recurse-submodules can only be used to create branches"));
+			die(_("--recurse-submodules can only be used to "
+				"create branches"));
 	}
 
 	recurse_submodules =
@@ -756,7 +734,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 	finalize_colopts(&colopts, -1);
 	if (filter.verbose) {
 		if (explicitly_enable_column(colopts))
-			die(_("options '%s' and '%s' cannot be used together"), "--column", "--verbose");
+			die(_("options --column and --verbose used together"));
 		colopts = 0;
 	}
 
@@ -805,7 +783,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 
 		if (!argc) {
 			if (filter.detached)
-				die(_("Cannot give description to detached HEAD"));
+				die(_("cannot give description to detached HEAD"));
 			branch_name = head;
 		} else if (argc == 1) {
 			strbuf_branchname(&buf, argv[0], INTERPRET_BRANCH_LOCAL);
@@ -816,9 +794,9 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 
 		strbuf_addf(&branch_ref, "refs/heads/%s", branch_name);
 		if (!ref_exists(branch_ref.buf))
-			ret = error((!argc || !strcmp(head, branch_name))
-			      ? _("No commit on branch '%s' yet.")
-			      : _("No branch named '%s'."),
+			error((!argc || !strcmp(head, branch_name))
+			      ? _("no commit on branch '%s' yet")
+			      : _("no branch named '%s'"),
 			      branch_name);
 		else if (!edit_branch_description(branch_name))
 			ret = 0; /* happy */
@@ -835,7 +813,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 		else if (argc == 2)
 			copy_or_rename_branch(argv[0], argv[1], 1, copy > 1);
 		else
-			die(_("too many branches for a copy operation"));
+			die(_("too many arguments"));
 	} else if (rename) {
 		if (!argc)
 			die(_("branch name required"));
@@ -844,7 +822,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 		else if (argc == 2)
 			copy_or_rename_branch(argv[0], argv[1], 0, rename > 1);
 		else
-			die(_("too many arguments for a rename operation"));
+			die(_("too many arguments"));
 	} else if (new_upstream) {
 		struct branch *branch;
 		struct strbuf buf = STRBUF_INIT;
@@ -855,21 +833,18 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 			strbuf_branchname(&buf, argv[0], INTERPRET_BRANCH_LOCAL);
 			branch = branch_get(buf.buf);
 		} else
-			die(_("too many arguments to set new upstream"));
+			die(_("too many arguments"));
 
 		if (!branch) {
 			if (!argc || !strcmp(argv[0], "HEAD"))
-				die(_("could not set upstream of HEAD to %s when "
-				      "it does not point to any branch."),
-				    new_upstream);
-			die(_("no such branch '%s'"), argv[0]);
+				die(_("cannot modify upstream to detached HEAD"));
+			die(_("no branch named '%s'"), argv[0]);
 		}
 
-		if (!ref_exists(branch->refname)) {
-			if (!argc || !strcmp(head, branch->name))
-				die(_("No commit on branch '%s' yet."), branch->name);
-			die(_("branch '%s' does not exist"), branch->name);
-		}
+		if (!ref_exists(branch->refname))
+			die(!argc || !strcmp(head, branch->name)
+				? _("no commit on branch '%s' yet")
+				: _("no branch named '%s'"), branch->name);
 
 		dwim_and_setup_tracking(the_repository, branch->name,
 					new_upstream, BRANCH_TRACK_OVERRIDE,
@@ -885,17 +860,16 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 			strbuf_branchname(&buf, argv[0], INTERPRET_BRANCH_LOCAL);
 			branch = branch_get(buf.buf);
 		} else
-			die(_("too many arguments to unset upstream"));
+			die(_("too many arguments"));
 
 		if (!branch) {
 			if (!argc || !strcmp(argv[0], "HEAD"))
-				die(_("could not unset upstream of HEAD when "
-				      "it does not point to any branch."));
-			die(_("no such branch '%s'"), argv[0]);
+				die(_("cannot modify upstream to detached HEAD"));
+			die(_("no branch named '%s'"), argv[0]);
 		}
 
 		if (!branch_has_merge_config(branch))
-			die(_("Branch '%s' has no upstream information"), branch->name);
+			die(_("branch '%s' has no upstream information"), branch->name);
 
 		strbuf_reset(&buf);
 		strbuf_addf(&buf, "branch.%s.remote", branch->name);
@@ -909,20 +883,23 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 		const char *start_name = argc == 2 ? argv[1] : head;
 
 		if (filter.kind != FILTER_REFS_BRANCHES)
-			die(_("The -a, and -r, options to 'git branch' do not take a branch name.\n"
-				  "Did you mean to use: -a|-r --list <pattern>?"));
+			die(_("options -a and -r do not take a branch name\n"
+				"Did you mean to use: -a|-r --list <pattern>?"));
 
 		if (track == BRANCH_TRACK_OVERRIDE)
-			die(_("the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead."));
+			die(_("option --set-upstream is no longer supported\n"
+				"Please use --track or --set-upstream-to instead"));
 
-		if (recurse_submodules) {
+		if (recurse_submodules)
 			create_branches_recursively(the_repository, branch_name,
 						    start_name, NULL, force,
 						    reflog, quiet, track, 0);
-			return 0;
-		}
-		create_branch(the_repository, branch_name, start_name, force, 0,
-			      reflog, quiet, track, 0);
+		else
+			create_branch(the_repository, branch_name, start_name,
+					force, 0, reflog, quiet, track, 0);
+
+		printf(_("New branch '%s' created from '%s'\n"),
+			branch_name, start_name);
 	} else
 		usage_with_options(builtin_branch_usage, options);
 
diff --git a/t/t1430-bad-ref-name.sh b/t/t1430-bad-ref-name.sh
index ff1c967d55..de3249eb9d 100755
--- a/t/t1430-bad-ref-name.sh
+++ b/t/t1430-bad-ref-name.sh
@@ -192,7 +192,7 @@ test_expect_success 'branch -d can delete broken name' '
 	test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&
 	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
 	git branch -d broken...ref >output 2>error &&
-	test_i18ngrep "Deleted branch broken...ref (was broken)" output &&
+	test_i18ngrep "Deleted branch '"'"'broken...ref'"'"' (was broken)" output &&
 	test_must_be_empty error &&
 	git branch >output 2>error &&
 	! grep -e "broken\.\.\.ref" error &&
@@ -218,7 +218,7 @@ test_expect_success 'branch -d can delete symref to broken name' '
 	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" &&
 	git branch -d badname >output 2>error &&
 	test_path_is_missing .git/refs/heads/badname &&
-	test_i18ngrep "Deleted branch badname (was refs/heads/broken\.\.\.ref)" output &&
+	test_i18ngrep "Deleted branch '"'"'badname'"'"' (was refs/heads/broken\.\.\.ref)" output &&
 	test_must_be_empty error
 '
 
@@ -236,7 +236,7 @@ test_expect_success 'branch -d can delete dangling symref to broken name' '
 	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" &&
 	git branch -d badname >output 2>error &&
 	test_path_is_missing .git/refs/heads/badname &&
-	test_i18ngrep "Deleted branch badname (was refs/heads/broken\.\.\.ref)" output &&
+	test_i18ngrep "Deleted branch '"'"'badname'"'"' (was refs/heads/broken\.\.\.ref)" output &&
 	test_must_be_empty error
 '
 
@@ -265,7 +265,7 @@ test_expect_success 'branch -d can delete symref with broken name' '
 	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" &&
 	git branch -d broken...symref >output 2>error &&
 	test_path_is_missing .git/refs/heads/broken...symref &&
-	test_i18ngrep "Deleted branch broken...symref (was refs/heads/main)" output &&
+	test_i18ngrep "Deleted branch '"'"'broken...symref'"'"' (was refs/heads/main)" output &&
 	test_must_be_empty error
 '
 
@@ -283,7 +283,7 @@ test_expect_success 'branch -d can delete dangling symref with broken name' '
 	test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" &&
 	git branch -d broken...symref >output 2>error &&
 	test_path_is_missing .git/refs/heads/broken...symref &&
-	test_i18ngrep "Deleted branch broken...symref (was refs/heads/idonotexist)" output &&
+	test_i18ngrep "Deleted branch '"'"'broken...symref'"'"' (was refs/heads/idonotexist)" output &&
 	test_must_be_empty error
 '
 
diff --git a/t/t2407-worktree-heads.sh b/t/t2407-worktree-heads.sh
index 019a40df2c..b0992d5f91 100755
--- a/t/t2407-worktree-heads.sh
+++ b/t/t2407-worktree-heads.sh
@@ -45,7 +45,7 @@ test_expect_success 'refuse to overwrite: checked out in worktree' '
 		grep "cannot force update the branch" err &&
 
 		test_must_fail git branch -D wt-$i 2>err &&
-		grep "Cannot delete branch" err || return 1
+		grep "cannot delete branch" err || return 1
 	done
 '
 
diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh
index 7d8edff9c3..326c505c29 100755
--- a/t/t3200-branch.sh
+++ b/t/t3200-branch.sh
@@ -39,7 +39,10 @@ test_expect_success 'branch -h in broken repository' '
 '
 
 test_expect_success 'git branch abc should create a branch' '
-	git branch abc && test_path_is_file .git/refs/heads/abc
+	git branch abc >actual &&
+	echo "New branch '"'"'abc'"'"' created from '"'"'main'"'"'" >expect &&
+	test_cmp expect actual &&
+	test_path_is_file .git/refs/heads/abc
 '
 
 test_expect_success 'git branch abc should fail when abc exists' '
@@ -716,7 +719,7 @@ EOF
 test_expect_success 'deleting a symref' '
 	git branch target &&
 	git symbolic-ref refs/heads/symref refs/heads/target &&
-	echo "Deleted branch symref (was refs/heads/target)." >expect &&
+	echo "Deleted branch '"'"'symref'"'"' (was refs/heads/target)" >expect &&
 	git branch -d symref >actual &&
 	test_path_is_file .git/refs/heads/target &&
 	test_path_is_missing .git/refs/heads/symref &&
@@ -726,7 +729,7 @@ test_expect_success 'deleting a symref' '
 test_expect_success 'deleting a dangling symref' '
 	git symbolic-ref refs/heads/dangling-symref nowhere &&
 	test_path_is_file .git/refs/heads/dangling-symref &&
-	echo "Deleted branch dangling-symref (was nowhere)." >expect &&
+	echo "Deleted branch '"'"'dangling-symref'"'"' (was nowhere)" >expect &&
 	git branch -d dangling-symref >actual &&
 	test_path_is_missing .git/refs/heads/dangling-symref &&
 	test_cmp expect actual
@@ -735,7 +738,7 @@ test_expect_success 'deleting a dangling symref' '
 test_expect_success 'deleting a self-referential symref' '
 	git symbolic-ref refs/heads/self-reference refs/heads/self-reference &&
 	test_path_is_file .git/refs/heads/self-reference &&
-	echo "Deleted branch self-reference (was refs/heads/self-reference)." >expect &&
+	echo "Deleted branch '"'"'self-reference'"'"' (was refs/heads/self-reference)" >expect &&
 	git branch -d self-reference >actual &&
 	test_path_is_missing .git/refs/heads/self-reference &&
 	test_cmp expect actual
@@ -853,7 +856,7 @@ test_expect_success 'test deleting branch deletes branch config' '
 test_expect_success 'test deleting branch without config' '
 	git branch my7 s &&
 	sha1=$(git rev-parse my7 | cut -c 1-7) &&
-	echo "Deleted branch my7 (was $sha1)." >expect &&
+	echo "Deleted branch '"'"'my7'"'"' (was $sha1)" >expect &&
 	git branch -d my7 >actual 2>&1 &&
 	test_cmp expect actual
 '
@@ -923,7 +926,7 @@ test_expect_success 'simple tracking skips when remote ref is not a branch' '
 '
 
 test_expect_success '--set-upstream-to fails on multiple branches' '
-	echo "fatal: too many arguments to set new upstream" >expect &&
+	echo "fatal: too many arguments" >expect &&
 	test_must_fail git branch --set-upstream-to main a b c 2>err &&
 	test_cmp expect err
 '
@@ -931,13 +934,13 @@ test_expect_success '--set-upstream-to fails on multiple branches' '
 test_expect_success '--set-upstream-to fails on detached HEAD' '
 	git checkout HEAD^{} &&
 	test_when_finished git checkout - &&
-	echo "fatal: could not set upstream of HEAD to main when it does not point to any branch." >expect &&
+	echo "fatal: cannot modify upstream to detached HEAD" >expect &&
 	test_must_fail git branch --set-upstream-to main 2>err &&
 	test_cmp expect err
 '
 
 test_expect_success '--set-upstream-to fails on a missing dst branch' '
-	echo "fatal: branch '"'"'does-not-exist'"'"' does not exist" >expect &&
+	echo "fatal: no branch named '"'"'does-not-exist'"'"'" >expect &&
 	test_must_fail git branch --set-upstream-to main does-not-exist 2>err &&
 	test_cmp expect err
 '
@@ -979,7 +982,7 @@ test_expect_success 'use --set-upstream-to modify a particular branch' '
 '
 
 test_expect_success '--unset-upstream should fail if given a non-existent branch' '
-	echo "fatal: Branch '"'"'i-dont-exist'"'"' has no upstream information" >expect &&
+	echo "fatal: branch '"'"'i-dont-exist'"'"' has no upstream information" >expect &&
 	test_must_fail git branch --unset-upstream i-dont-exist 2>err &&
 	test_cmp expect err
 '
@@ -1001,13 +1004,13 @@ test_expect_success 'test --unset-upstream on HEAD' '
 	test_must_fail git config branch.main.remote &&
 	test_must_fail git config branch.main.merge &&
 	# fail for a branch without upstream set
-	echo "fatal: Branch '"'"'main'"'"' has no upstream information" >expect &&
+	echo "fatal: branch '"'"'main'"'"' has no upstream information" >expect &&
 	test_must_fail git branch --unset-upstream 2>err &&
 	test_cmp expect err
 '
 
 test_expect_success '--unset-upstream should fail on multiple branches' '
-	echo "fatal: too many arguments to unset upstream" >expect &&
+	echo "fatal: too many arguments" >expect &&
 	test_must_fail git branch --unset-upstream a b c 2>err &&
 	test_cmp expect err
 '
@@ -1015,7 +1018,7 @@ test_expect_success '--unset-upstream should fail on multiple branches' '
 test_expect_success '--unset-upstream should fail on detached HEAD' '
 	git checkout HEAD^{} &&
 	test_when_finished git checkout - &&
-	echo "fatal: could not unset upstream of HEAD when it does not point to any branch." >expect &&
+	echo "fatal: cannot modify upstream to detached HEAD" >expect &&
 	test_must_fail git branch --unset-upstream 2>err &&
 	test_cmp expect err
 '
diff --git a/t/t3202-show-branch.sh b/t/t3202-show-branch.sh
index ea7cfd1951..6b4be35e4c 100755
--- a/t/t3202-show-branch.sh
+++ b/t/t3202-show-branch.sh
@@ -9,9 +9,7 @@ GIT_TEST_DATE_NOW=1251660000; export GIT_TEST_DATE_NOW
 
 test_expect_success 'error descriptions on empty repository' '
 	current=$(git branch --show-current) &&
-	cat >expect <<-EOF &&
-	error: No commit on branch '\''$current'\'' yet.
-	EOF
+	echo "error: no commit on branch '"'"'$current'"'"' yet" > expect &&
 	test_must_fail git branch --edit-description 2>actual &&
 	test_cmp expect actual &&
 	test_must_fail git branch --edit-description $current 2>actual &&
@@ -20,9 +18,7 @@ test_expect_success 'error descriptions on empty repository' '
 
 test_expect_success 'fatal descriptions on empty repository' '
 	current=$(git branch --show-current) &&
-	cat >expect <<-EOF &&
-	fatal: No commit on branch '\''$current'\'' yet.
-	EOF
+	echo "fatal: no commit on branch '"'"'$current'"'"' yet" > expect &&
 	test_must_fail git branch --set-upstream-to=non-existent 2>actual &&
 	test_cmp expect actual &&
 	test_must_fail git branch -c new-branch 2>actual &&
@@ -198,23 +194,12 @@ done <<\EOF
 EOF
 
 test_expect_success 'error descriptions on non-existent branch' '
-	cat >expect <<-EOF &&
-	error: No branch named '\''non-existent'\'.'
-	EOF
+	echo "error: no branch named '"'"'non-existent'"'"'" > expect &&
 	test_must_fail git branch --edit-description non-existent 2>actual &&
-	test_cmp expect actual
-'
-
-test_expect_success 'fatal descriptions on non-existent branch' '
-	cat >expect <<-EOF &&
-	fatal: branch '\''non-existent'\'' does not exist
-	EOF
+	test_cmp expect actual &&
+	echo "fatal: no branch named '"'"'non-existent'"'"'" > expect &&
 	test_must_fail git branch --set-upstream-to=non-existent non-existent 2>actual &&
 	test_cmp expect actual &&
-
-	cat >expect <<-EOF &&
-	fatal: No branch named '\''non-existent'\''.
-	EOF
 	test_must_fail git branch -c non-existent new-branch 2>actual &&
 	test_cmp expect actual &&
 	test_must_fail git branch -m non-existent new-branch 2>actual &&
