Skip to content

feat: add defaults for fetch pull, push, and dropdowns options - #2777

Open
bertyhell wants to merge 3 commits into
sourcegit-scm:developfrom
bertyhell:feature/defaults-for-fetch-pull-push
Open

bertyhell wants to merge 3 commits into
sourcegit-scm:developfrom
bertyhell:feature/defaults-for-fetch-pull-push

Conversation

@bertyhell

@bertyhell bertyhell commented Oct 12, 2026 •

Copy link
Copy Markdown

Run Fetch / Pull / Push with one click, with optional saved defaults

image spinner image image image
simplify-fetch-pull-and-push-buttons.webm

Motivation

Most people don't change the options for fetch, pull, push very often. then set them once, then leave them be.
Currently the app always requires 2 clicks to fetch, pull, push. this change reduces that to 1 click, while also allowing the settings to be modified or one off runs with different settings.

What changed

Toolbar

  • Fetch, Pull and Push each have a small chevron (▾) next to them.
  • Clicking the main icon runs the action straight away with the saved default options. The options panel doesn't open.
  • Clicking the chevron opens the options panel as before.
  • While an action started from the icon is running, a thin progress bar in the accent colour animates along the bottom of that button.
  • When it succeeds, a small badge (a dark check on an accent-coloured circle) shows at the bottom right of the icon for about 3 seconds.
  • Errors still show as the usual error toasts.
  • If an action needs input before it can run, the options panel opens instead. Examples: a pull with no matching remote branch, or a push to a new remote branch.
  • The hotkeys (Ctrl+↓, Ctrl+Shift+↓, Ctrl+Shift+↑) use the same one-click flow.

Options panel

  • Two icon buttons sit at the bottom left of the Fetch, Pull and Push panels. Hovering shows the full label as a tooltip.
    • Save as default (floppy): saves the current options for this repository.
    • Reset defaults (circle arrow): puts the options back to the built-in values.
  • These options are saved:
    • Fetch: all remotes, no tags, force
    • Pull: use rebase, what to do with local changes
    • Push: set upstream, check submodules, push all tags, no-verify
  • Force push is deliberately never saved, so a one-click push can never force-push.
  • Remote and branch choices are still worked out from upstream tracking, as before.

Behaviour changes

  • Changing an option in the panel now applies only to that run. It is saved only when you click Save as default. Before, some options (all remotes, no tags, force, rebase, push all tags) were saved as soon as you toggled them. Values saved before this change are loaded as the defaults.
  • Fetch now returns its real result. When a fetch started from the panel fails, the panel stays open, as Pull and Push already do.
  • While an action started from the icon is running, other popups are blocked, the same way auto-fetch blocks them.

Implementation notes

  • Popup has new virtual methods: HasDefaultOptions, SaveOptionsAsDefault() and ResetDefaultOptions(). They are implemented by Fetch, Pull and Push.
  • RepositoryUIStates has three new fields: DealWithLocalChangesOnPull, SetTrackingOnPush and NoVerifyOnPush. The existing CheckSubmodulesOnPush is now actually used.
  • Repository.RunPopupInBackgroundAsync runs a popup's Sure() without showing the popup. It exposes the IsFetching/IsPulling/IsPushing and Is*Succeeded state that the toolbar binds to.
  • There is a new Icons.ResetDefaults icon.
  • New strings are added to en_US only: Text.Popup.SaveAsDefault, Text.Popup.ResetDefaults, Text.Repository.ShowOptions.

@love-linger love-linger self-assigned this Oct 13, 2026
@love-linger

Copy link
Copy Markdown
Collaborator

Directly fetch/pull/push requires holding the Ctrl key or using hotkeys.

image

And these commands should display a popup even when run directly.

@love-linger love-linger added not-planned It's not planned in the future already-done This feature already exists labels Oct 13, 2026
@bertyhell

Copy link
Copy Markdown
Author

it seems more logical to have the default click be the action that the user most wants to execute
and the ctrl click be the action that they rarely execute

for me, i usually want the normal fetch with default settings.
the normal pull with default settings
and the normal push with default settings

so an extra ctrl or extra ok click seems like extra work compared to other git clients

Which do you most often use? the shortcuts or the ctrl + click? or do you always go through the options menu?

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

already-done This feature already exists not-planned It's not planned in the future

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants