If a user does not wish to use DWIM behaviour, they must manually specify git checkout --no-guess each time. Teach checkout and switch to honour the checkout.guess config variable instead. Changes since v1: * Replace enumerated priority list with bullet points Denton Liu (2): Documentation/config/checkout: replace sq with backticks checkout: learn to respect checkout.guess Documentation/config/checkout.txt | 21 +++++++---- Documentation/git-checkout.txt | 3 ++ Documentation/git-switch.txt | 3 ++ builtin/checkout.c | 7 +++- contrib/completion/git-completion.bash | 25 ++++++++----- t/t2024-checkout-dwim.sh | 11 ++++++ t/t2060-switch.sh | 5 ++- t/t9902-completion.sh | 52 ++++++++++++++++++++++++++ 8 files changed, 108 insertions(+), 19 deletions(-) Range-diff against v1: 1: f08d3f796a = 1: f08d3f796a Documentation/config/checkout: replace sq with backticks 2: 8172602f6f ! 2: 2678680a08 checkout: learn to respect checkout.guess @@ builtin/checkout.c: static int switch_branches(const struct checkout_opts *opts, ## contrib/completion/git-completion.bash ## @@ contrib/completion/git-completion.bash: _git_bundle () - # To decide between the following rules in priority order - # 1) the last provided of "--guess" or "--no-guess" explicitly enable or - # disable completion of DWIM logic respectively. + # Helper function to decide whether or not we should enable DWIM logic for + # git-switch and git-checkout. + # +-# To decide between the following rules in priority order +-# 1) the last provided of "--guess" or "--no-guess" explicitly enable or +-# disable completion of DWIM logic respectively. -# 2) If the --no-track option is provided, take this as a hint to disable the -+# 2) If checkout.guess is false, disable completion of DWIM logic. -+# 3) If the --no-track option is provided, take this as a hint to disable the - # DWIM completion logic +-# DWIM completion logic -# 3) If GIT_COMPLETION_CHECKOUT_NO_GUESS is set, disable the DWIM completion -+# 4) If GIT_COMPLETION_CHECKOUT_NO_GUESS is set, disable the DWIM completion - # logic, as requested by the user. +-# logic, as requested by the user. -# 4) Enable DWIM logic otherwise. -+# 5) Enable DWIM logic otherwise. ++# To decide between the following rules in decreasing priority order: ++# - the last provided of "--guess" or "--no-guess" explicitly enable or ++# disable completion of DWIM logic respectively. ++# - If checkout.guess is false, disable completion of DWIM logic. ++# - If the --no-track option is provided, take this as a hint to disable the ++# DWIM completion logic ++# - If GIT_COMPLETION_CHECKOUT_NO_GUESS is set, disable the DWIM completion ++# logic, as requested by the user. ++# - Enable DWIM logic otherwise. # __git_checkout_default_dwim_mode () { -- 2.28.0.942.g77c4c6094c