I forgot to pull before pushing
What just happened
Colleagues pushed while you were working. Your branch and the remote now each have commits the other doesn't. Git refuses to push so it doesn't erase their work: you need to integrate their commits first. Nothing is lost.
Potential risks
- The tempting git push --force would delete their commits from the remote.
- If you both changed the same lines, you'll get conflicts to resolve.
Before you run anything
- Never force push to get out of this.
- Commit (or stash) your current work before pulling.
- Golden rule: before any destructive command, create a safety branch with git branch backup/before-fix — it costs nothing.
Recovery steps
- 1
See what you missed
fetch downloads without changing anything. The log lists their commits that you don't have yet.
Safe$ git fetch origin$ git log --oneline HEAD..origin/main - 2
Put your commits on top of theirs, then push
--rebase replays your commits after theirs: a clean, linear history, no merge commit.
Caution$ git pull --rebase$ git push - 3
Conflicts during the rebase?
Fix the files, add them, continue. Lost? --abort puts everything back as before the pull.
Safe$ git status$ git add path/to/file$ git rebase --continue# or$ git rebase --abort - 4
Already pulled and got a “Merge branch 'main' of…” commit?
Not pushed yet and you prefer a clean history: undo that merge, then pull with rebase. (Keeping the merge commit is fine too: just push.)
Destructive$ git reset --hard ORIG_HEAD$ git pull --rebase - 5
So it never happens again
Make pull rebase by default, and pull before starting a task and before pushing.
Safe$ git config --global pull.rebase true$ git config --global rebase.autoStash true
These procedures are provided for information only. Read each command and adapt it to your situation before running it. Disclaimer