pull: add pull.autoStash config option

Git uses `rebase.autostash` or `merge.autostash` to determine whether a
dirty worktree is allowed during pull. However, this behavior is not
clearly documented, making it difficult for users to discover how to
enable autostash, or causing them to unknowingly enable it. Add new
config option `pull.autostash` along with its documentation and test
cases.

`pull.autostash` provides the same functionality as `rebase.autostash`
and `merge.autostash`, but overrides them when set. If `pull.autostash`
is not set, it falls back to `rebase.autostash` or `merge.autostash`,
depending on the value of `pull.rebase`.

Signed-off-by: Lidong Yan <yldhome2d2@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Lidong Yan
2025-07-20 20:43:34 +08:00
committed by Junio C Hamano
parent 16bd9f20a4
commit e3378607c8
3 changed files with 93 additions and 3 deletions

View File

@@ -29,5 +29,21 @@ pull.octopus::
The default merge strategy to use when pulling multiple branches
at once.
pull.autoStash::
When set to true, automatically create a temporary stash entry
to record the local changes before the operation begins, and
restore them after the operation completes. When your "git
pull" rebases (instead of merges), this may be convenient, since
unlike merging pull that tolerates local changes that do not
interfere with the merge, rebasing pull refuses to work with any
local changes.
+
If `pull.autostash` is set (either to true or false),
`merge.autostash` and `rebase.autostash` are ignored. If
`pull.autostash` is not set at all, depending on the value of
`pull.rebase`, `merge.autostash` or `rebase.autostash` is used
instead. Can be overridden by the `--[no-]autostash` command line
option.
pull.twohead::
The default merge strategy to use when pulling a single branch.