| .github | ||
| .all-contributorsrc | ||
| .deepsource.toml | ||
| .gitignore | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| git-undo | ||
| LICENSE | ||
| README.md | ||
| ugit | ||
| ugit.plugin.zsh | ||
ugit

Undo your last oopsie 🙈️ in git
More Video Demos ✨️
Undo git add
Undo git branch -D
Undo git merge
More Video Demos ✨️
Undo git add
Undo git branch -D
Undo git merge
Why ugit
- You did an accidental
gitcommand you didn't want to. - You don't want to waste your time searching on how to undo ...
- Because
ugitis cool
Motivations behind writing ugit 🙇♂️️
What's in the box
ugit/git-undo supports undoing following operations, some are a WIP. If you know of any other operations that can be undone and is not in the list, make sure to send a quick PR 💛️
- Undo
git commit - Undo
git add - Undo
git push - Undo
git branch -D(branch delete) - Undo
git pull - Undo
git reset - Undo
git tag -d(tag delete) - Undo
git stash apply - Undo
git stash pop/drop/clear - Undo accidental file delete (Restore a deleted file after a commit)
- Undo (Restore) a file to a previous version
- Undo
git merge - Undo
git tag(rename a tag) - Undo
git rebase - Undo
git cherry-pick - Undo
git worktree remove(recover deleted work-tree)
Help me finish above tasks by contributing?
Have any other ideas/suggestions? Hop in to ugit discussions 💬️
Installation
Prerequisites
ugit dependencies:
- Bash >=
4.x.x - Git >=
2.23.0 - fzf >=
0.21.0 - GNU utils like
awk,grep,tputetc
Manual Installation
-
Install the script using
curlLinux
curl -fsSL https://github.com/Bhupesh-V/ugit/releases/latest/download/ugit -o ugit && chmod +x ugit && mv ugit $HOME/.local/bin/Mac
curl -fsSL https://github.com/Bhupesh-V/ugit/releases/latest/download/ugit -o ugit && chmod +x ugit && mv ugit /usr/local/binOr Arch Linux users can install ugit via AUR.
-
Verify installation
ugit --versionOptionally run
ugit --helpto see help and management commandsUndo your last oopsie in Git 🙈 Usage: ugit [-h] [-v] [-u] ugit helps you undo your last git command without much effort Just run 'ugit' and search for what you want to undo Available options: -h, --help Print this help and exit -v, --version Print current ugit version -u, --update Update ugit Contact 📬: varshneybhupesh@gmail.com for assistance Read the guide: https://bhupesh.gitbook.io/notes/git/how-to-undo-anything-in-git
ZSH Frameworks
Zgenom
If you're using Zgenom:
- Add
zgenom load Bhupesh-V/ugitto your.zshrcalong with your otherzgenom loadcommands. zgenom reset && zgenom save
Antigen
If you're using Antigen:
- Add
antigen bundle Bhupesh-V/ugitto your.zshrcwhere you've listed your other plugins. - Close and reopen your Terminal/iTerm window to refresh context and use the plugin. Alternatively, you can run
antigen bundle Bhupesh-V/ugitin a running shell to haveantigenload the new plugin.
Oh-My-ZSH
If you're using oh-my-zsh:
-
Clone the repository into a new
ugitdirectory in oh-my-zsh's plugin folder:git clone https://github.com/Bhupesh-V/ugit.git $ZSH_CUSTOM/plugins/ugit -
Edit your
~/.zshrcand addugit– same as clone directory – to the list of plugins to enable:plugins=( ... ugit ) -
Then, restart your terminal application to refresh context and use the plugin. Alternatively, you can source your current shell configuration:
source ~/.zshrc
ugit in ...
News
- Featured on Changelog News
- The guide was tweeted by GitHub (I was logging my research process there while building ugit)
Community
- Alexander Alemayhu made a youtube tutorial on Undoing Your Last Git Commit with Ugit
Please read ⚠️
Git comes with a garbage collector (in case you didn't know) therefore undoing some commands will become impossible if the entries are deleted from the reflog. One way to prevent this is to increase default time limits before the reflog entries expire.
Add these configuration in your global .gitconfig file:
[gc]
# default 90 days
reflogExpire = 200
Used to set how long records in a branches reflog should be preserved.
[gc]
# default 30 days
reflogExpireUnreachable = 90
Used to set how long inaccessible reflog records should be preserved.
Not satisfied? 😒️
You can read my in-process guide on How to undo anything in Git
Author
👤 Bhupesh Varshney
- Web : bhupesh-v.github.io
- Twitter : @bhupeshimself
- DEV : bhupesh
Credit & Thanks
To all the SO threads that I will probably never visit again ;)
☺️ Show your support
Support me by giving a ⭐️ if this project helped you! or just
📝 License
Copyright © 2021 Bhupesh Varshney.
This project is MIT licensed.
👋 Contributing
Please read the CONTRIBUTING file for the process of submitting pull requests to us.
Contributors ✨
Thanks goes to these wonderful people (emoji key):
Sharan Aithal 💻 📖 |
Tabulate 💻 📦 |
Joe Block 💻 📖 🔌 |
This project follows the all-contributors specification. Contributions of any kind welcome!
