🕵️ SicherheitslückenHak5: Hackers Just Poisoned the Rust Supply Chain | Threat Wire(01.09.2026 um 14:00 Uhr)
🕵️ SicherheitslückenHak5: Hackers Found a Way Into Humanoid Robots | Threat Wire(04.09.2026 um 15:04 Uhr)
🔧 AI Nachrichten Bits und so #1021 (Passwort für Laufwerk)(31.08.2026 um 22:15 Uhr)
🔧 AI Nachrichten Bits und so #1022 (Wie Weißbier)(06.09.2026 um 20:39 Uhr)
🍏 iOS / Mac OSHue-App 6.0 ist da: das sind die Neuerungen(07.09.2026 um 17:21 Uhr)
🕵️ SicherheitslückenHak5: Hackers Just Poisoned the Rust Supply Chain | Threat Wire(01.09.2026 um 14:00 Uhr)
🕵️ SicherheitslückenHak5: Hackers Found a Way Into Humanoid Robots | Threat Wire(04.09.2026 um 15:04 Uhr)
🔧 AI Nachrichten Bits und so #1021 (Passwort für Laufwerk)(31.08.2026 um 22:15 Uhr)
🔧 AI Nachrichten Bits und so #1022 (Wie Weißbier)(06.09.2026 um 20:39 Uhr)
🍏 iOS / Mac OSHue-App 6.0 ist da: das sind die Neuerungen(07.09.2026 um 17:21 Uhr)

🔧 Programmierung 🕛 kürzlich 4 Min Lesezeit
0

Reset, revert, and reflog: the ultimate guide to undoing commits without losing your repo

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

CODE
# How to undo commits in Git (locally and on GitHub) and recover “lost” files with reflog

It happens to everyone: you make a commit, push it to GitHub, realize something shouldn’t be there… and while trying to fix it you end up “losing” a file or a commit.

Good news: **Git almost always has a way out** (especially if you use `reflog`).

In this post you’ll learn:

-
How to **undo the last commits** locally and on GitHub
- The difference between **reset** and **revert**
- How to **recover commits** after a `reset --hard`
- How to **restore a specific file** from an earlier commit
- How to **change the last commit message**
- A real example with commands and terminal output

---

## The real-world scenario

You’re working on a repo and you create commits like:

-
`chore: remove compiled artifacts from the repository`
- `chore: add .gitignore to exclude unnecessary files`

Then you try to undo the last commit, you run `push --force-with-lease`, and later you say:
> “I need to recover that file.”

Let’s go step by step.

---

## 1) Undo the last commits: reset vs revert

### Option A: `reset` (rewrites history)
Useful when you want those commits to **disappear from the history**.

-
**Deletes commits and discards changes** (hard mode):
```bash
git reset --hard HEAD~2








  • Deletes commits but keeps changes staged (soft mode):




CODE
git reset --soft HEAD~2







If you already pushed to GitHub, to make the remote match you must force push:





CODE
git push --force-with-lease origin YOUR_BRANCH






Example:




CODE
git push --force-with-lease origin master






--force-with-lease is safer than --force because it prevents overwriting remote changes you don’t have locally.









Option B: revert (does NOT rewrite history)



Recommended when:




  • Other people are working on the repo

  • The branch is shared

  • The branch is protected (e.g., main/master)



It creates new commits that undo the changes:




CODE
git revert --no-edit HEAD~2..HEAD
git push origin YOUR_BRANCH












2) Recover commits after reset --hard with reflog



If you ran:




CODE
git reset --hard HEAD~1






and then regretted it, your lifeline is:




CODE
git reflog






Real example output:




CODE
dc65430 HEAD@{0}: reset: moving to HEAD~1
3bfb189 HEAD@{1}: commit: chore: add .gitignore to exclude unnecessary files
dc65430 HEAD@{2}: commit: chore: remove compiled artifacts from the repository






You can see the “lost” commit still exists: 3bfb189.



To return to that state:




CODE
git reset --hard 3bfb189






If you also want GitHub to match:




CODE
git push --force-with-lease origin master












3) Restore a specific file from an earlier commit



Sometimes you don’t want to move the whole branch—only recover one file that existed in a past commit.






Important



This command always requires a path:




CODE
git restore --source <COMMIT> -- <FILE_PATH>






Common example: restore .gitignore from 3bfb189:




CODE
git restore --source 3bfb189 -- .gitignore






Then save it in history:




CODE
git add .gitignore
git commit -m "chore: restore .gitignore"
git push origin master












“I don’t know the exact file path…”



First, list the files touched by that commit:




CODE
git show --name-status --pretty="" 3bfb189






Or list everything that exists in that commit:




CODE
git ls-tree -r 3bfb189 --name-only






Once you find the exact path, restore it:




CODE
git restore --source 3bfb189 -- real/path/to/file.ext












Restore EVERYTHING from a commit (warning: overwrites)



If you truly want to bring everything back exactly as it was in that commit:




CODE
git restore --source 3bfb189 -- .












4) Change the last commit message






If you have NOT pushed yet






CODE
git commit --amend -m "new message"









If you ALREADY pushed to GitHub






CODE
git commit --amend -m "new message"
git push --force-with-lease origin YOUR_BRANCH






Example:




CODE
git push --force-with-lease origin master












5) Tips to avoid Git pain (seriously)




  • Before doing an aggressive reset, create a “backup branch”:




CODE
git branch backup-before-reset







  • Prefer --force-with-lease over --force

  • If you’re working with a team, prefer revert over reset


  • reflog is your “secret history”: when something “disappears”, check git reflog









Wrap-up



If you ever feel like you “lost” commits or files, remember:





  • git reflog finds the commit you can’t see anymore


  • git restore --source restores specific files without breaking everything


  • reset rewrites history (requires force push)


  • revert is team-friendly

Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
1 Quelle
Hackers Just Poisoned the Rust Supply Chain | Threat Wire
1 Quelle
Hackers Found a Way Into Humanoid Robots | Threat Wire
1 Quelle
Bits und so #1021 (Passwort für Laufwerk)
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Reset, revert, and reflog: the ultimate guide to undoing commits without losing your repo

Thematisch verwandte Begriffe: Reset, revert, reflog, ultimate · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...