Skip to content

Commit bed1524

Browse files
committed
Merge branch 'rj/advice-delete-branch-not-fully-merged'
The error message given when "git branch -d branch" fails due to commits unique to the branch has been split into an error and a new conditional advice message. * rj/advice-delete-branch-not-fully-merged: branch: make the advice to force-deleting a conditional one advice: fix an unexpected leading space advice: sort the advice related lists
2 parents 951eafe + bec9bb4 commit bed1524

File tree

4 files changed

+99
-95
lines changed

4 files changed

+99
-95
lines changed

Documentation/config/advice.txt

Lines changed: 80 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,59 @@ advice.*::
44
can tell Git that you do not need help by setting these to 'false':
55
+
66
--
7+
addEmbeddedRepo::
8+
Advice on what to do when you've accidentally added one
9+
git repo inside of another.
10+
addEmptyPathspec::
11+
Advice shown if a user runs the add command without providing
12+
the pathspec parameter.
13+
addIgnoredFile::
14+
Advice shown if a user attempts to add an ignored file to
15+
the index.
16+
amWorkDir::
17+
Advice that shows the location of the patch file when
18+
linkgit:git-am[1] fails to apply it.
719
ambiguousFetchRefspec::
820
Advice shown when a fetch refspec for multiple remotes maps to
921
the same remote-tracking branch namespace and causes branch
1022
tracking set-up to fail.
23+
checkoutAmbiguousRemoteBranchName::
24+
Advice shown when the argument to
25+
linkgit:git-checkout[1] and linkgit:git-switch[1]
26+
ambiguously resolves to a
27+
remote tracking branch on more than one remote in
28+
situations where an unambiguous argument would have
29+
otherwise caused a remote-tracking branch to be
30+
checked out. See the `checkout.defaultRemote`
31+
configuration variable for how to set a given remote
32+
to be used by default in some situations where this
33+
advice would be printed.
34+
commitBeforeMerge::
35+
Advice shown when linkgit:git-merge[1] refuses to
36+
merge to avoid overwriting local changes.
37+
detachedHead::
38+
Advice shown when you used
39+
linkgit:git-switch[1] or linkgit:git-checkout[1]
40+
to move to the detached HEAD state, to instruct how to
41+
create a local branch after the fact.
42+
diverging::
43+
Advice shown when a fast-forward is not possible.
1144
fetchShowForcedUpdates::
1245
Advice shown when linkgit:git-fetch[1] takes a long time
1346
to calculate forced updates after ref updates, or to warn
1447
that the check is disabled.
15-
pushUpdateRejected::
16-
Set this variable to 'false' if you want to disable
17-
'pushNonFFCurrent', 'pushNonFFMatching', 'pushAlreadyExists',
18-
'pushFetchFirst', 'pushNeedsForce', and 'pushRefNeedsUpdate'
19-
simultaneously.
20-
pushNonFFCurrent::
21-
Advice shown when linkgit:git-push[1] fails due to a
22-
non-fast-forward update to the current branch.
23-
pushNonFFMatching::
24-
Advice shown when you ran linkgit:git-push[1] and pushed
25-
'matching refs' explicitly (i.e. you used ':', or
26-
specified a refspec that isn't your current branch) and
27-
it resulted in a non-fast-forward error.
48+
forceDeleteBranch::
49+
Advice shown when a user tries to delete a not fully merged
50+
branch without the force option set.
51+
ignoredHook::
52+
Advice shown if a hook is ignored because the hook is not
53+
set as executable.
54+
implicitIdentity::
55+
Advice on how to set your identity configuration when
56+
your information is guessed from the system username and
57+
domain name.
58+
nestedTag::
59+
Advice shown if a user attempts to recursively tag a tag object.
2860
pushAlreadyExists::
2961
Shown when linkgit:git-push[1] rejects an update that
3062
does not qualify for fast-forwarding (e.g., a tag.)
@@ -37,17 +69,42 @@ advice.*::
3769
tries to overwrite a remote ref that points at an
3870
object that is not a commit-ish, or make the remote
3971
ref point at an object that is not a commit-ish.
72+
pushNonFFCurrent::
73+
Advice shown when linkgit:git-push[1] fails due to a
74+
non-fast-forward update to the current branch.
75+
pushNonFFMatching::
76+
Advice shown when you ran linkgit:git-push[1] and pushed
77+
'matching refs' explicitly (i.e. you used ':', or
78+
specified a refspec that isn't your current branch) and
79+
it resulted in a non-fast-forward error.
80+
pushRefNeedsUpdate::
81+
Shown when linkgit:git-push[1] rejects a forced update of
82+
a branch when its remote-tracking ref has updates that we
83+
do not have locally.
4084
pushUnqualifiedRefname::
4185
Shown when linkgit:git-push[1] gives up trying to
4286
guess based on the source and destination refs what
4387
remote ref namespace the source belongs in, but where
4488
we can still suggest that the user push to either
4589
refs/heads/* or refs/tags/* based on the type of the
4690
source object.
47-
pushRefNeedsUpdate::
48-
Shown when linkgit:git-push[1] rejects a forced update of
49-
a branch when its remote-tracking ref has updates that we
50-
do not have locally.
91+
pushUpdateRejected::
92+
Set this variable to 'false' if you want to disable
93+
'pushNonFFCurrent', 'pushNonFFMatching', 'pushAlreadyExists',
94+
'pushFetchFirst', 'pushNeedsForce', and 'pushRefNeedsUpdate'
95+
simultaneously.
96+
resetNoRefresh::
97+
Advice to consider using the `--no-refresh` option to
98+
linkgit:git-reset[1] when the command takes more than 2 seconds
99+
to refresh the index after reset.
100+
resolveConflict::
101+
Advice shown by various commands when conflicts
102+
prevent the operation from being performed.
103+
rmHints::
104+
In case of failure in the output of linkgit:git-rm[1],
105+
show directions on how to proceed from the current state.
106+
sequencerInUse::
107+
Advice shown when a sequencer command is already in progress.
51108
skippedCherryPicks::
52109
Shown when linkgit:git-rebase[1] skips a commit that has already
53110
been cherry-picked onto the upstream branch.
@@ -68,76 +125,22 @@ advice.*::
68125
Advise to consider using the `-u` option to linkgit:git-status[1]
69126
when the command takes more than 2 seconds to enumerate untracked
70127
files.
71-
commitBeforeMerge::
72-
Advice shown when linkgit:git-merge[1] refuses to
73-
merge to avoid overwriting local changes.
74-
resetNoRefresh::
75-
Advice to consider using the `--no-refresh` option to
76-
linkgit:git-reset[1] when the command takes more than 2 seconds
77-
to refresh the index after reset.
78-
resolveConflict::
79-
Advice shown by various commands when conflicts
80-
prevent the operation from being performed.
81-
sequencerInUse::
82-
Advice shown when a sequencer command is already in progress.
83-
implicitIdentity::
84-
Advice on how to set your identity configuration when
85-
your information is guessed from the system username and
86-
domain name.
87-
detachedHead::
88-
Advice shown when you used
89-
linkgit:git-switch[1] or linkgit:git-checkout[1]
90-
to move to the detached HEAD state, to instruct how to
91-
create a local branch after the fact.
92-
suggestDetachingHead::
93-
Advice shown when linkgit:git-switch[1] refuses to detach HEAD
94-
without the explicit `--detach` option.
95-
checkoutAmbiguousRemoteBranchName::
96-
Advice shown when the argument to
97-
linkgit:git-checkout[1] and linkgit:git-switch[1]
98-
ambiguously resolves to a
99-
remote tracking branch on more than one remote in
100-
situations where an unambiguous argument would have
101-
otherwise caused a remote-tracking branch to be
102-
checked out. See the `checkout.defaultRemote`
103-
configuration variable for how to set a given remote
104-
to be used by default in some situations where this
105-
advice would be printed.
106-
amWorkDir::
107-
Advice that shows the location of the patch file when
108-
linkgit:git-am[1] fails to apply it.
109-
rmHints::
110-
In case of failure in the output of linkgit:git-rm[1],
111-
show directions on how to proceed from the current state.
112-
addEmbeddedRepo::
113-
Advice on what to do when you've accidentally added one
114-
git repo inside of another.
115-
ignoredHook::
116-
Advice shown if a hook is ignored because the hook is not
117-
set as executable.
118-
waitingForEditor::
119-
Print a message to the terminal whenever Git is waiting for
120-
editor input from the user.
121-
nestedTag::
122-
Advice shown if a user attempts to recursively tag a tag object.
123128
submoduleAlternateErrorStrategyDie::
124129
Advice shown when a submodule.alternateErrorStrategy option
125130
configured to "die" causes a fatal error.
126131
submodulesNotUpdated::
127132
Advice shown when a user runs a submodule command that fails
128133
because `git submodule update --init` was not run.
129-
addIgnoredFile::
130-
Advice shown if a user attempts to add an ignored file to
131-
the index.
132-
addEmptyPathspec::
133-
Advice shown if a user runs the add command without providing
134-
the pathspec parameter.
134+
suggestDetachingHead::
135+
Advice shown when linkgit:git-switch[1] refuses to detach HEAD
136+
without the explicit `--detach` option.
135137
updateSparsePath::
136138
Advice shown when either linkgit:git-add[1] or linkgit:git-rm[1]
137139
is asked to update index entries outside the current sparse
138140
checkout.
139-
diverging::
140-
Advice shown when a fast-forward is not possible.
141+
waitingForEditor::
142+
Print a message to the terminal whenever Git is waiting for
143+
editor input from the user.
141144
worktreeAddOrphan::
142145
Advice shown when a user tries to create a worktree from an
143146
invalid reference, to instruct how to create a new unborn

advice.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ static struct {
4040
[ADVICE_ADD_EMBEDDED_REPO] = { "addEmbeddedRepo", 1 },
4141
[ADVICE_ADD_EMPTY_PATHSPEC] = { "addEmptyPathspec", 1 },
4242
[ADVICE_ADD_IGNORED_FILE] = { "addIgnoredFile", 1 },
43-
[ADVICE_AM_WORK_DIR] = { "amWorkDir", 1 },
4443
[ADVICE_AMBIGUOUS_FETCH_REFSPEC] = { "ambiguousFetchRefspec", 1 },
44+
[ADVICE_AM_WORK_DIR] = { "amWorkDir", 1 },
4545
[ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME] = { "checkoutAmbiguousRemoteBranchName", 1 },
4646
[ADVICE_COMMIT_BEFORE_MERGE] = { "commitBeforeMerge", 1 },
4747
[ADVICE_DETACHED_HEAD] = { "detachedHead", 1 },
48-
[ADVICE_SUGGEST_DETACHING_HEAD] = { "suggestDetachingHead", 1 },
4948
[ADVICE_DIVERGING] = { "diverging", 1 },
5049
[ADVICE_FETCH_SHOW_FORCED_UPDATES] = { "fetchShowForcedUpdates", 1 },
50+
[ADVICE_FORCE_DELETE_BRANCH] = { "forceDeleteBranch", 1 },
5151
[ADVICE_GRAFT_FILE_DEPRECATED] = { "graftFileDeprecated", 1 },
5252
[ADVICE_IGNORED_HOOK] = { "ignoredHook", 1 },
5353
[ADVICE_IMPLICIT_IDENTITY] = { "implicitIdentity", 1 },
@@ -56,15 +56,12 @@ static struct {
5656
[ADVICE_PUSH_ALREADY_EXISTS] = { "pushAlreadyExists", 1 },
5757
[ADVICE_PUSH_FETCH_FIRST] = { "pushFetchFirst", 1 },
5858
[ADVICE_PUSH_NEEDS_FORCE] = { "pushNeedsForce", 1 },
59-
[ADVICE_PUSH_REF_NEEDS_UPDATE] = { "pushRefNeedsUpdate", 1 },
60-
61-
/* make this an alias for backward compatibility */
62-
[ADVICE_PUSH_UPDATE_REJECTED_ALIAS] = { "pushNonFastForward", 1 },
63-
6459
[ADVICE_PUSH_NON_FF_CURRENT] = { "pushNonFFCurrent", 1 },
6560
[ADVICE_PUSH_NON_FF_MATCHING] = { "pushNonFFMatching", 1 },
61+
[ADVICE_PUSH_REF_NEEDS_UPDATE] = { "pushRefNeedsUpdate", 1 },
6662
[ADVICE_PUSH_UNQUALIFIED_REF_NAME] = { "pushUnqualifiedRefName", 1 },
6763
[ADVICE_PUSH_UPDATE_REJECTED] = { "pushUpdateRejected", 1 },
64+
[ADVICE_PUSH_UPDATE_REJECTED_ALIAS] = { "pushNonFastForward", 1 }, /* backwards compatibility */
6865
[ADVICE_RESET_NO_REFRESH_WARNING] = { "resetNoRefresh", 1 },
6966
[ADVICE_RESOLVE_CONFLICT] = { "resolveConflict", 1 },
7067
[ADVICE_RM_HINTS] = { "rmHints", 1 },
@@ -74,8 +71,9 @@ static struct {
7471
[ADVICE_STATUS_AHEAD_BEHIND_WARNING] = { "statusAheadBehindWarning", 1 },
7572
[ADVICE_STATUS_HINTS] = { "statusHints", 1 },
7673
[ADVICE_STATUS_U_OPTION] = { "statusUoption", 1 },
77-
[ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE] = { "submoduleAlternateErrorStrategyDie", 1 },
7874
[ADVICE_SUBMODULES_NOT_UPDATED] = { "submodulesNotUpdated", 1 },
75+
[ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE] = { "submoduleAlternateErrorStrategyDie", 1 },
76+
[ADVICE_SUGGEST_DETACHING_HEAD] = { "suggestDetachingHead", 1 },
7977
[ADVICE_UPDATE_SPARSE_PATH] = { "updateSparsePath", 1 },
8078
[ADVICE_WAITING_FOR_EDITOR] = { "waitingForEditor", 1 },
8179
[ADVICE_WORKTREE_ADD_ORPHAN] = { "worktreeAddOrphan", 1 },

advice.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ struct string_list;
1010
* Add the new config variable to Documentation/config/advice.txt.
1111
* Call advise_if_enabled to print your advice.
1212
*/
13-
enum advice_type {
13+
enum advice_type {
1414
ADVICE_ADD_EMBEDDED_REPO,
1515
ADVICE_ADD_EMPTY_PATHSPEC,
1616
ADVICE_ADD_IGNORED_FILE,
17-
ADVICE_AM_WORK_DIR,
1817
ADVICE_AMBIGUOUS_FETCH_REFSPEC,
18+
ADVICE_AM_WORK_DIR,
1919
ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME,
2020
ADVICE_COMMIT_BEFORE_MERGE,
2121
ADVICE_DETACHED_HEAD,
2222
ADVICE_DIVERGING,
23-
ADVICE_SUGGEST_DETACHING_HEAD,
2423
ADVICE_FETCH_SHOW_FORCED_UPDATES,
24+
ADVICE_FORCE_DELETE_BRANCH,
2525
ADVICE_GRAFT_FILE_DEPRECATED,
2626
ADVICE_IGNORED_HOOK,
2727
ADVICE_IMPLICIT_IDENTITY,
@@ -32,23 +32,24 @@ struct string_list;
3232
ADVICE_PUSH_NEEDS_FORCE,
3333
ADVICE_PUSH_NON_FF_CURRENT,
3434
ADVICE_PUSH_NON_FF_MATCHING,
35+
ADVICE_PUSH_REF_NEEDS_UPDATE,
3536
ADVICE_PUSH_UNQUALIFIED_REF_NAME,
36-
ADVICE_PUSH_UPDATE_REJECTED_ALIAS,
3737
ADVICE_PUSH_UPDATE_REJECTED,
38-
ADVICE_PUSH_REF_NEEDS_UPDATE,
38+
ADVICE_PUSH_UPDATE_REJECTED_ALIAS,
3939
ADVICE_RESET_NO_REFRESH_WARNING,
4040
ADVICE_RESOLVE_CONFLICT,
4141
ADVICE_RM_HINTS,
4242
ADVICE_SEQUENCER_IN_USE,
4343
ADVICE_SET_UPSTREAM_FAILURE,
44+
ADVICE_SKIPPED_CHERRY_PICKS,
4445
ADVICE_STATUS_AHEAD_BEHIND_WARNING,
4546
ADVICE_STATUS_HINTS,
4647
ADVICE_STATUS_U_OPTION,
47-
ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE,
4848
ADVICE_SUBMODULES_NOT_UPDATED,
49+
ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE,
50+
ADVICE_SUGGEST_DETACHING_HEAD,
4951
ADVICE_UPDATE_SPARSE_PATH,
5052
ADVICE_WAITING_FOR_EDITOR,
51-
ADVICE_SKIPPED_CHERRY_PICKS,
5253
ADVICE_WORKTREE_ADD_ORPHAN,
5354
};
5455

builtin/branch.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "ref-filter.h"
2525
#include "worktree.h"
2626
#include "help.h"
27+
#include "advice.h"
2728
#include "commit-reach.h"
2829

2930
static const char * const builtin_branch_usage[] = {
@@ -190,9 +191,10 @@ static int check_branch_commit(const char *branchname, const char *refname,
190191
return -1;
191192
}
192193
if (!force && !branch_merged(kinds, branchname, rev, head_rev)) {
193-
error(_("the branch '%s' is not fully merged.\n"
194-
"If you are sure you want to delete it, "
195-
"run 'git branch -D %s'"), branchname, branchname);
194+
error(_("the branch '%s' is not fully merged"), branchname);
195+
advise_if_enabled(ADVICE_FORCE_DELETE_BRANCH,
196+
_("If you are sure you want to delete it, "
197+
"run 'git branch -D %s'"), branchname);
196198
return -1;
197199
}
198200
return 0;

0 commit comments

Comments
 (0)