Ugit
π¨οΈ ugit helps undo git commands. Your damage control git buddy. Undo from 20+ git scenarios.
Install / Use
/learn @Bhupesh-V/UgitREADME
https://user-images.githubusercontent.com/34342551/121651365-29dbdc80-cab8-11eb-8c43-6d0c4b1509ad.mp4
<h4>Undo <code>git branch -D</code></h4>https://user-images.githubusercontent.com/34342551/121650985-c487eb80-cab7-11eb-9b6a-9257fa704d1c.mp4
<h4>Undo <code>git merge</code></h4>https://user-images.githubusercontent.com/34342551/121651071-d9fd1580-cab7-11eb-929d-d9359a64f0eb.mp4
</details></h2>Why use ugit?
- You accidentally ran a
gitcommand you wish to 'undo'. - You want to save time by not searching for how to undo ...
- Your focus is on the problems at hand and not on Git (avoid context switching)
Motivations behind writing ugit πββοΈοΈ
What's in the box?
ugit/git-undo supports undoing the following operations, some are a WIP. If you know of any other operations that can be undone and are not in the list, make sure to raise an issue or make a quick PR ποΈ
- [x] Undo
git commit - [x] Undo
git add - [x] Undo
git push - [x] Undo
git branch -D(branch delete) - [x] Undo
git pull - [x] Undo
git reset - [x] Undo
git tag -d(tag delete) - [x] Undo
git stash apply - [x] Undo
git stash pop/drop/clear - [x] Undo accidental file delete (Restore a deleted file after a commit)
- [x] Undo (Restore) a file to a previous version
- [x] Undo
git merge - [x] Undo
git cherry-pick - [x] Undo
git tag - [ ] Undo
git rebase - [ ] Undo
git worktree remove(recover deleted work-tree)
Contribute to the project by helping me with the above-mentioned tasks.
If you have any other ideas/suggestions, do send them across. Hop in to ugit discussions π¬οΈ
News
| When | What |
|:--------------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 29 Oct, 2022 | ugit crossed 1k stars |
| 02 June, 2022 | console.dev featured ugit |
| 18 May, 2022 | I gave a talk about the git tooling ecosystem & git undo in Undo git, say whaat! - GitHub India Constellation, May 2022 |
| 12 May, 2021 | The guide was tweeted by GitHub (I was logging my research process there while building ugit) |
| 30 April, 2021 | Featured on Changelog News |
Community
- Alexander Alemayhu made a YouTube tutorial on Undoing Your Last Git Commit with Ugit
Installation
docker pull bhupeshimself/ugit
docker run --rm -it -v $(pwd):/app bhupeshimself/ugit
Prerequisites
ugit dependencies:
- Bash >=
4.x.x - Git >=
2.23.0 - fzf >=
0.21.0- Installation guide - GNU utils like
awk,grep,tputetc
Linux
sh -c "$(curl -fsSL https://raw.githubusercontent.com/Bhupesh-V/ugit/master/install)"
Arch Linux users can install ugit via AUR.
Mac
brew install ugit
Windows
To use ugit on Windows you need to install:
-
Git Bash<br> Git bash comes with git (if you have installed it on your machine then no need). To install git (preferably with scoop):
scoop install git -
FZF
scoop install fzfAlternatively, with Chocolatey:
choco install fzf -
To use bash in terminal change your directory to
**git\2.35.3.windows.1\bin\bash**accordingly. -
Then either clone the repo,
git clone https://github.com/Bhupesh-V/ugit.gitor get it using curl:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/Bhupesh-V/ugit/master/install)"
Fig
Fig adds apps, shortcuts, and autocomplete to your existing terminal.
Install ugit in just one click.
<a href="https://fig.io/plugins/other/ugit_Bhupesh-V" target="_blank"><img src="https://fig.io/badges/install-with-fig.svg" /></a>
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
Note on git-undo Command Conflict
If you have both ugit and git-extras (https://github.com/tj/git-extras) installed, be aware that both provide a git-undo command. This can lead to conflicts, as only one version of the command will be accessible at a time. To resolve this:
-
Using Homebrew: Homebrew will notify you of the conflict during installation. You can choose to unlink the conflicting formula or use the --overwrite flag to force the link as follows:
brew link --overwrite ugit -
Manual Installation: Ensure that the
git-undocommand from the desired package is prioritized in your system's PATH.
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 configurations in your global .gitconfig file:
[gc]
# default 90 days
reflogExpire = 200
Used to set how long records in a branch 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
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.<br /> This project is MIT licensed.
π Contributing
Please read the CONTRIBUTING file for the process of submitting pull requests to
