Change:
VSCode Version: 1.1.1 OS Version: OS X Steps to Reproduce: into a merge conflict accepting Git's default message. It's equal to is no way to do that!
Will mention that it's also equivalent to and saving the default message that shows up in your editor - hence a very common workflow
My workaround is to invoke from a terminal. Maybe if the commit message field is empty, VSCode could just call as well and leave it up to user's configuration what happens (in my case, it would open a text editor from my system variable, which is fine).
Has the pull request been reviewed yet? Can it be pulled in?
Verification: When having a merge commit, VS Code should now automatically populate the input box with the default git merge commit message, so the user can just accept it.

Discussion:
private async commitWithAnyInput(repository: Repository, opts?: CommitOptions): Promise<void> { const message = repository.inputBox.value; const getCommitMessage = async () => { <del> if (message) { return message; } </del> <ins> let _message: string | undefined = message; if (!_message) { let value: string | undefined = undefined; </ins> <del> let value: string | undefined = undefined; </del> <ins> if (opts && opts.amend && repository.HEAD && repository.HEAD.commit) { value = (await repository.getCommit(repository.HEAD.commit)).message; } </ins> <del> if (opts && opts.amend && repository.HEAD && repository.HEAD.commit) { value = (await repository.getCommit(repository.HEAD.commit)).message; </del> <ins> _message = await window.showInputBox({ value, placeHolder: localize('commit message', "Commit message"), prompt: localize('provide commit message', "Please provide a commit message"), ignoreFocusOut: true }); </ins> } <del> return await window.showInputBox({ value, placeHolder: localize('commit message', "Commit message"), prompt: localize('provide commit message', "Please provide a commit message"), ignoreFocusOut: true }); </del> <ins> return _message ? repository.cleanUpCommitEditMessage(_message) : _message; </ins> }; const didCommit = await this.smartCommit(repository, getCommitMessage, opts);

return; } <del> const didCommit = await this.smartCommit(repository, async () => repository.inputBox.value); </del> <ins> const didCommit = await this.smartCommit(repository, async () => repository.cleanUpCommitEditMessage(repository.inputBox.value)); </ins> if (didCommit) { repository.inputBox.value = await repository.getCommitTemplate();

} } <ins> cleanupCommitEditMessage(message: string): string { //TODO: Support core.commentChar return message.replace(/^s*#.*$n?/gm, '').trim(); } async getMergeMessage(): Promise<string | undefined> { const mergeMsgPath = path.join(this.repositoryRoot, '.git', 'MERGE_MSG'); try { const raw = await readfile(mergeMsgPath, 'utf8'); return raw.trim(); } catch { return undefined; } } </ins> async getCommitTemplate(): Promise<string> { try { const result = await this.run(['config', '--get', 'commit.template']);

} const raw = await readfile(templatePath, 'utf8'); <del> return raw.replace(/^s*#.*$n?/gm, '').trim(); </del> <ins> return raw.trim(); </ins> } catch (err) { return '';

return await this.run(Operation.GetCommitTemplate, async () => this.repository.getCommitTemplate()); } <ins> async cleanUpCommitEditMessage(editMessage: string): Promise<string> { return this.repository.cleanupCommitEditMessage(editMessage); } </ins> async ignore(files: Uri[]): Promise<void> { return await this.run(Operation.Ignore, async () => { const ignoreFile = `${this.repository.root}${path.sep}.gitignore`;

const config = workspace.getConfiguration('git'); const shouldIgnore = config.get<boolean>('ignoreLimitWarning') === true; const useIcons = !config.get<boolean>('decorations.enabled', true); this.isRepositoryHuge = didHitLimit; <ins> const mergeMessage = await this.repository.getMergeMessage(); if (mergeMessage) { this.inputBox.value = mergeMessage; } </ins> if (didHitLimit && !shouldIgnore && !this.didWarnAboutLimit) { const knownHugeFolderPaths = await this.findKnownHugeFolderPathsToIgnore();