Code change:
I've attempted to find any other requests for this but didn't seem to see any. At the moment the CVS context menu shows: ! Only "Pop latest stash" and "Pop stash..." are visible. Is it possible to change the default stash behaviour to "apply" rather than "pop"? Additionally, is it possible to add two lines under "Pop stash..." for the same actions, just using apply: Apply latest stash Apply stash... I just lost a few hours and considerable amount of hair when a popped stash was deleted. I then had to sift through doing on each . Having "Apply stash..." easily accessible might be nicer.
(Experimental duplicate detection) Thanks for submitting this issue. Please also check if it is already covered by an existing one, like: <!-- score: 0.676 --<!-- potentialduplicatescomment --
I suggest to simply add and commands.
is anyone working on this, if not, I'll like to pick it up as a
looks like it might already be done in
yeah, just confirmed, Thanks. If I may ask, is there any rule around tagging an issue that is being worked on as it would be multiple efforts if I happen to have started it without anyone's knowledge. I've been scouting for an issue with no assignee to work on :-( Thanks for the catch tho!

Related discussion:
text: @command('git.stashPop', { repository: true }) async stashPop(repository: Repository): Promise<void> { <ins> const placeHolder = localize('pick stash to pop', "Pick a stash to pop"); const choice = await this.pickStash(repository, placeHolder); if (!choice) { return; } await repository.popStash(choice.id); } @command('git.stashPopLatest', { repository: true }) async stashPopLatest(repository: Repository): Promise<void> { </ins> const stashes = await repository.getStashes(); <del> if (stashes.length === 0) { window.showInformationMessage(localize('no stashes', "There are no stashes to restore.")); </del> <ins> if (!this.anyStashesAvailableToRestore(stashes)) { </ins> return; } <del> const picks = stashes.map(r => ({ label: `#${r.index}:  ${r.description}`, description: '', details: '', id: r.index })); const placeHolder = localize('pick stash to pop', "Pick a stash to pop"); const choice = await window.showQuickPick(picks, { placeHolder }); </del> <ins> await repository.popStash(); } @command('git.stashApply', { repository: true }) async stashApply(repository: Repository): Promise<void> { const placeHolder = localize('pick stash to apply', "Pick a stash to apply"); const choice = await this.pickStash(repository, placeHolder); </ins> if (!choice) { return; } <del> await repository.popStash(choice.id); </del> <ins> await repository.applyStash(choice.id); </ins> } <del> @command('git.stashPopLatest', { repository: true }) async stashPopLatest(repository: Repository): Promise<void> { </del> <ins> @command('git.stashApplyLatest', { repository: true }) async stashApplyLatest(repository: Repository): Promise<void> { </ins> const stashes = await repository.getStashes(); <del> if (stashes.length === 0) { </del> <ins> if (!this.anyStashesAvailableToRestore(stashes)) { return; } await repository.applyStash(); } private anyStashesAvailableToRestore(stashes: Stash[]): boolean { const stashesAvailable = stashes.length > 0; if (!stashesAvailable) { </ins> window.showInformationMessage(localize('no stashes', "There are no stashes to restore.")); <ins> } return stashesAvailable; } private async pickStash(repository: Repository, placeHolder: string) { const stashes = await repository.getStashes(); if (!this.anyStashesAvailableToRestore(stashes)) { </ins> return; } <del> await repository.popStash(); </del> <ins> const picks = stashes.map(r => ({ label: `#${r.index}:  ${r.description}`, description: '', details: '', id: r.index })); return await window.showQuickPick(picks, { placeHolder }); </ins> } private createCommand(id: string, key: string, method: Function, options: CommandOptions): (...args: any[]) => any { const result = (...args: any[]) => { let result: Promise<any>;