Currently developing futuristic smart-device, IoT connected, highway construction site safety system in EU.
Used to work on infrastructure, application architecture and cloud engineering.
Please note that you would only be able to achieve all this if your git repo was not garbage cleaned (yes, git has its own Garbage Collector).
There is an optional git config variable called gc.reflogExpireUnreachable that defaults to 30 days that clears all unreachable reflogs (not pointing to/from any live reflogs - a.k.a. lost commits).
Git garbage collection is run automatically on several frequently used commands:
git pull
git merge
git rebase
git commit
To prevent running automatic GC on your git repos run: git config --global gc.auto 0
Similarly you could set to never expire reflog entries which would make your git repo to grow much larger than usually: git config --global gc.pruneExpire never
git config --global gc.reflogExpire never
Full stack developer building things to make life a little easier. Huge fan of JavaScript, React, Node.js, and testing my code. • twitter.com/ZakLaughton • zaklaughton.dev
Thanks for pointing this out! These tools are best used for resets to a recent state (within a few days at the most).
From my understanding, the default expiration is 90 days, but the impact is the same: if you have really old changes that you might want to use later, these should probably be reliably saved in a commit somewhere.
If you know ahead of time you want a reliable long-lasting backup of your branch state, you can create a backup branch before making changes.
git checkout my-new-branch
git branch my-new-branch-backup
# now reset, rebase, or otherwise destroy my-new-branch# checkout my-new-branch-backup later to restore
Currently developing futuristic smart-device, IoT connected, highway construction site safety system in EU.
Used to work on infrastructure, application architecture and cloud engineering.
The thing is some tools enable/update/run git GC automatically (and sometimes even without you knowing). That might kill your whole reflog history and any attempts to restore... :(
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Please note that you would only be able to achieve all this if your git repo was not garbage cleaned (yes, git has its own Garbage Collector).
There is an optional git config variable called gc.reflogExpireUnreachable that defaults to 30 days that clears all unreachable reflogs (not pointing to/from any live reflogs - a.k.a. lost commits).
Git garbage collection is run automatically on several frequently used commands:
To prevent running automatic GC on your git repos run:
git config --global gc.auto 0
Similarly you could set to never expire reflog entries which would make your git repo to grow much larger than usually:
git config --global gc.pruneExpire never
git config --global gc.reflogExpire never
Good to know!
Thanks for pointing this out! These tools are best used for resets to a recent state (within a few days at the most).
From my understanding, the default expiration is 90 days, but the impact is the same: if you have really old changes that you might want to use later, these should probably be reliably saved in a commit somewhere.
If you know ahead of time you want a reliable long-lasting backup of your branch state, you can create a backup branch before making changes.
The thing is some tools enable/update/run git GC automatically (and sometimes even without you knowing). That might kill your whole reflog history and any attempts to restore... :(