The 'Operation cancelled' error in Git typically occurs when GPG signing fails due to terminal issues, when the credential helper times out, or when a network operation is interrupted. The fix depends on whether the error stems from GPG configuration, authentication, or connectivity problems.
This error indicates that Git was unable to complete an operation because it was cancelled before finishing. The cancellation can happen for several different reasons: 1. **GPG Signing Failed**: When Git is configured to sign commits with GPG and the signing process cannot complete—typically because GPG cannot access the terminal to prompt for your passphrase. 2. **Credential Helper Timeout**: On Windows, the Git Credential Manager may time out while waiting for authentication, especially when there are configuration conflicts between system and global credential helper settings. 3. **Network Operation Interrupted**: A push, pull, fetch, or clone operation may be cancelled due to network instability, proxy issues, or the remote server being unavailable. 4. **User Cancellation**: The user manually cancelled the operation (Ctrl+C) or dismissed an authentication/passphrase prompt. The full error message often provides more context. For example, `gpg: signing failed: Operation cancelled` indicates a GPG problem, while `fatal: TaskCanceledException encountered` (on Windows) points to credential helper issues.
If the error mentions GPG signing, the most common fix is setting the GPG_TTY variable so GPG can access your terminal:
Add to your shell configuration:
# Add to ~/.bashrc, ~/.zshrc, or ~/.profile
export GPG_TTY=$(tty)Apply immediately:
source ~/.bashrc # or ~/.zshrcFor tmux users, ensure this is in a file that's sourced for non-login shells (like ~/.bashrc for Bash, not just ~/.bash_profile).
Verify it's set:
echo $GPG_TTY
# Should output something like /dev/pts/0If GPG signing suddenly stopped working, restart the GPG agent:
# Kill the running GPG agent
gpgconf --kill gpg-agent
# The agent will restart automatically on next GPG operationTest signing works:
echo "test" | gpg --clearsign
# If this prompts for your passphrase and succeeds, GPG is workingIf the test fails, the issue is with your GPG configuration, not Git.
If GPG cannot show a passphrase prompt, configure the appropriate pinentry program:
For terminal-only environments (SSH, tmux):
# Edit ~/.gnupg/gpg-agent.conf
echo "pinentry-program /usr/bin/pinentry-tty" >> ~/.gnupg/gpg-agent.conf
# Restart the agent
gpgconf --kill gpg-agentFor macOS with GUI:
# Install pinentry-mac
brew install pinentry-mac
# Configure GPG to use it
echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf
# Restart the agent
killall gpg-agentFor Linux with GUI:
# Use the GTK or Qt pinentry
echo "pinentry-program /usr/bin/pinentry-gtk-2" >> ~/.gnupg/gpg-agent.conf
# or
echo "pinentry-program /usr/bin/pinentry-qt" >> ~/.gnupg/gpg-agent.conf
gpgconf --kill gpg-agentExpired GPG keys will cause signing to fail:
Check your key status:
# List your keys with expiration dates
gpg --list-secret-keys --keyid-format SHORT
# Look for [expired] or check the expiration dateExtend an expired key:
# Edit the key (replace KEYID with your key ID)
gpg --edit-key KEYID
# At the gpg> prompt:
expire
# Enter new expiration (e.g., "1y" for 1 year)
# Save and quit
saveVerify Git is using the correct key:
# Check configured signing key
git config --global user.signingkey
# Set if not configured
git config --global user.signingkey KEYIDOn Windows, credential helper conflicts can cause TaskCanceledException errors:
Check current configuration:
# View system-level config
git config --list --system | Select-String credential
# View global-level config
git config --list --global | Select-String credentialFix by using consistent credential helper:
# Option 1: Use wincred (older, simpler)
git config --global credential.helper wincred
# Option 2: Remove conflicting system setting
git config --system --unset credential.helper
# Option 3: Use the newer Git Credential Manager
git config --global credential.helper manager-coreClear cached credentials if needed:
# Open Credential Manager
control /name Microsoft.CredentialManager
# Find and remove entries starting with "git:"If the error occurs during push, pull, or clone operations:
Test network connectivity:
# Test connection to GitHub
ssh -T [email protected]
# Or for HTTPS
curl -I https://github.comCheck service status:
- GitHub: [githubstatus.com](https://www.githubstatus.com/)
- GitLab: [status.gitlab.com](https://status.gitlab.com/)
- Bitbucket: [bitbucket.status.atlassian.com](https://bitbucket.status.atlassian.com/)
If using a proxy:
# Configure proxy settings
git config --global http.proxy http://proxy.example.com:8080
git config --global https.proxy https://proxy.example.com:8080
# Or unset if proxy is causing issues
git config --global --unset http.proxy
git config --global --unset https.proxyIf you need to commit urgently and can't fix GPG issues immediately:
Disable for a single commit:
git commit --no-gpg-sign -m "Your commit message"Disable globally (temporary workaround):
git config --global commit.gpgsign false
# Re-enable later with:
git config --global commit.gpgsign trueNote: This is a workaround, not a fix. If your organization requires signed commits, you should resolve the underlying GPG issue.
### Debugging GPG Issues
Enable verbose output to understand what's failing:
# Debug Git's GPG interaction
GIT_TRACE=1 git commit -m "test"
# Debug GPG directly
gpg --verbose --sign test.txt### Multiple GPG Installations (Windows)
On Windows, you may have multiple GPG installations (Git for Windows, Gpg4win, WSL). Ensure Git uses the correct one:
# Check which GPG Git is using
git config --global gpg.program
# Set explicitly if needed
git config --global gpg.program "C:\Program Files\Git\usr\bin\gpg.exe"
# Or for Gpg4win
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"### GPG Agent Caching
Configure GPG agent to cache your passphrase longer:
# Edit ~/.gnupg/gpg-agent.conf
default-cache-ttl 3600 # Cache for 1 hour
max-cache-ttl 86400 # Maximum 24 hours
# Restart agent
gpgconf --kill gpg-agent### SSH Agent Issues
If using SSH and the operation is cancelled during authentication:
# Check if SSH agent is running
ssh-add -l
# Start SSH agent if needed
eval "$(ssh-agent -s)"
# Add your key
ssh-add ~/.ssh/id_ed25519### WSL-Specific Issues
When using Git in WSL with GPG:
# Ensure GPG_TTY is set in WSL
echo 'export GPG_TTY=$(tty)' >> ~/.bashrc
# If using Windows GPG from WSL
export GPG_TTY=$(tty)
gpg-connect-agent updatestartuptty /bye### Version Compatibility
Ensure your GPG and pinentry versions are compatible:
# Check versions
gpg --version
pinentry --version
# Update if needed (Ubuntu/Debian)
sudo apt update && sudo apt upgrade gnupg pinentry-curses
# Update on macOS
brew upgrade gnupg pinentry-mac### Credential Manager Diagnostics (Windows)
# Check GCM version
git credential-manager --version
# Reconfigure GCM
git credential-manager unconfigure
git credential-manager configure
# Run diagnostics
git credential-manager diagnosekex_exchange_identification: Connection closed by remote host
Connection closed by remote host when connecting to Git server
fatal: unable to access: Proxy auto-configuration failed
How to fix 'Proxy auto-configuration failed' in Git
fatal: unable to access: Authentication failed (proxy requires basic auth)
How to fix 'Authentication failed (proxy requires basic auth)' in Git
fatal: unable to access: no_proxy configuration not working
How to fix 'no_proxy configuration not working' in Git
fatal: unable to read tree object in treeless clone
How to fix 'unable to read tree object in treeless clone' in Git