Skip to content

🔄 Undo Last Commit (Git āĻ āĻļ⧇āώ āĻ•āĻŽāĻŋāϟ āĻŦāĻžāϤāĻŋāϞ āĻ•āϰāĻž) ​

📌 āωāĻĻā§āĻĻ⧇āĻļā§āϝ: ​

āĻļ⧇āώ āϝ⧇āχ āĻ•āĻŽāĻŋāϟāϟāĻž āĻ•āϰ⧇āĻ›āĻŋ, āϏ⧇āϟāĻž āĻšā§ŸāϤ⧋:

  • āϭ⧁āϞ commit message,
  • āϭ⧁āϞ āĻĢāĻžāχāϞ,
  • āύāĻž āϚāĻžāĻ“ā§ŸāĻž āϕ⧋āύ⧋ āϕ⧋āĻĄ,
  • staging āĻŦāĻž working directory āĻ āĻŋāĻ• āύāĻž āĻĨāĻžāĻ•āĻž āĻ…āĻŦāĻ¸ā§āĻĨāĻžā§Ÿ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤

āĻāχ āϭ⧁āϞāϟāĻž āĻļ⧁āϧāϰāĻžāϤ⧇ āϚāĻžāχ, āϤāĻžāχ āĻļ⧇āώ āĻ•āĻŽāĻŋāϟāϟāĻŋ undo āĻ•āϰāϤ⧇ āϚāĻžāχāĨ¤

🧭 āϤāĻŋāύāĻ­āĻžāĻŦ⧇ āĻļ⧇āώ āĻ•āĻŽāĻŋāϟ Undo āĻ•āϰāĻž āϝāĻžā§Ÿ: ​

✅ ā§§. āĻļ⧁āϧ⧁ āĻļ⧇āώ āĻ•āĻŽāĻŋāϟ āĻŽā§āϛ⧇ āĻĢ⧇āϞ⧋, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ•āĻžāϜ (āĻĢāĻžāχāϞ āĻšā§‡āĻžā§āϜ) āϰ⧇āϖ⧇ āĻĻāĻžāĻ“ ​

āĻ…āĻ°ā§āĻĨāĻžā§Ž āφāĻĒāύāĻŋ āϝ⧇āχ āĻ•āĻŽāĻŋāϟ āĻ•āϰ⧇āϛ⧇āύ, āϏ⧇āϟāĻŋ āĻŽā§āϛ⧇ āϝāĻžāĻŦ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĢāĻžāχāϞāϗ⧁āϞ⧋ unstaged āĻ…āĻŦāĻ¸ā§āĻĨāĻžā§Ÿ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤

bash
git reset --soft HEAD~1
git reset --soft HEAD~1

đŸŽ¯ āωāĻĻāĻžāĻšāϰāĻŖ: ​

bash
git commit -m "Oops, āϭ⧁āϞ āĻ•āϰāϞāĻžāĻŽ"
git reset --soft HEAD~1
git commit -m "Oops, āϭ⧁āϞ āĻ•āϰāϞāĻžāĻŽ"
git reset --soft HEAD~1

āĻāĻ–āύ āφāĻĒāύāĻŋ git status āϚāĻžāϞāĻžāϞ⧇ āĻĻ⧇āĻ–āĻŦ⧇āύ āĻĢāĻžāχāϞāϗ⧁āϞ⧋ staging āĻ āφāϛ⧇āĨ¤ āφāĻĒāύāĻŋ āϚāĻžāχāϞ⧇ āφāĻŦāĻžāϰ āĻ āĻŋāĻ• āĻ•āϰ⧇ āĻ•āĻŽāĻŋāϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

✅ ⧍. āĻļ⧇āώ āĻ•āĻŽāĻŋāϟ āĻŽā§āϛ⧇ āĻĢ⧇āϞ⧋ āĻāĻŦāĻ‚ āĻĢāĻžāχāϞāϗ⧁āϞ⧋āĻ“ unstaged āĻ•āϰ⧋ ​

āĻāϟāĻž āĻ•āϰāϞ⧇ āĻļ⧇āώ āĻ•āĻŽāĻŋāϟ āĻŦāĻžāϤāĻŋāϞ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻĢāĻžāχāϞāϗ⧁āϞ⧋ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ (staging) āĻĨ⧇āϕ⧇ āϏāϰāĻŋā§Ÿā§‡ working directory-āϤ⧇ āϝāĻžāĻŦ⧇āĨ¤

bash
git reset --mixed HEAD~1
git reset --mixed HEAD~1

NB: āĻāϟāĻž āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻ•āĻŽāύāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšā§ŸāĨ¤

đŸŽ¯ āωāĻĻāĻžāĻšāϰāĻŖ: ​

bash
git reset --mixed HEAD~1
git reset --mixed HEAD~1

āĻāĻ–āύ git status āĻĻ⧇āĻ–āĻžāĻŦ⧇: modified files āφāϛ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤāĻžāϰāĻž staged āύāĻžāĨ¤

✅ ā§Š. āϏāĻŦāĻ•āĻŋāϛ⧁ āĻŦāĻžāϤāĻŋāϞ āĻ•āϰ⧇ āĻĢāĻžāχāϞāĻ“ āφāϗ⧇āϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻžā§Ÿ āύāĻŋā§Ÿā§‡ āϝāĻžāĻ“ (hard reset) ​

āϏāϤāĻ°ā§āĻ•āĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ! āĻ•āĻžāϰāĻŖ āφāĻĒāύāĻžāϰ āĻļ⧇āώ āĻ•āĻŽāĻŋāĻŸā§‡āϰ āϏāĻŦ āĻ•āĻžāϜ āϚāϞ⧇ āϝāĻžāĻŦ⧇āĨ¤

bash
git reset --hard HEAD~1
git reset --hard HEAD~1

đŸŽ¯ āωāĻĻāĻžāĻšāϰāĻŖ: ​

bash
git reset --hard HEAD~1
git reset --hard HEAD~1

āĻāϟāĻž āĻ•āϰāϞ⧇ āĻĢāĻžāχāϞ⧇āϰ āĻšā§‡āĻžā§āϜāϟāĻžāĻ“ āĻŦāĻžāϤāĻŋāϞ āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇āĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž āφāĻĒāύāĻŋ āϝ⧇āϟāĻž āĻ•āĻŽāĻŋāϟ āĻ•āϰ⧇āĻ›āĻŋāϞ⧇āύ, āϏ⧇āϟāĻŋ āĻ“ āϤāĻžāϰ āϏāĻŦ āĻĢāĻžāχāϞ⧇āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āωāϭ⧟āχ āϚāϞ⧇ āϝāĻžāĻŦ⧇āĨ¤

đŸ§Ē āĻ•āĻ–āύ āϕ⧋āύāϟāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ? ​

āωāĻĻā§āĻĻ⧇āĻļā§āϝāĻ•āĻŽāĻžāĻ¨ā§āĻĄ
āĻļ⧁āϧ⧁ āĻ•āĻŽāĻŋāϟ āĻŽā§āĻ›āϤ⧇ āϚāĻžāύ, āĻ•āĻžāϜ āϰāĻžāĻ–āϤ⧇ āϚāĻžāύgit reset --soft HEAD~1
āĻ•āĻŽāĻŋāϟ āĻŽā§āĻ›āϤ⧇ āϚāĻžāύ, āĻ•āĻžāϜ unstaged āϰāĻžāĻ–āϤ⧇ āϚāĻžāύgit reset --mixed HEAD~1
āĻ•āĻŽāĻŋāϟ + āĻ•āĻžāϜ āĻĻ⧁āχāϟāĻžāχ āĻŽā§āĻ›āϤ⧇ āϚāĻžāύgit reset --hard HEAD~1

✅ Reword (āĻļ⧁āϧ⧁ āĻ•āĻŽāĻŋāϟ āĻŽā§‡āϏ⧇āϜ āĻŦāĻĻāϞāĻžāύ⧋) ​

bash
git commit --amend
git commit --amend

đŸŽ¯ āωāĻĻāĻžāĻšāϰāĻŖ: ​

bash
git commit -m "Bug fixed"
# āϭ⧁āϞ āĻŽā§‡āϏ⧇āϜ! āĻāĻ–āύ āĻ āĻŋāĻ• āĻ•āϰāĻŦā§‹
git commit --amend
git commit -m "Bug fixed"
# āϭ⧁āϞ āĻŽā§‡āϏ⧇āϜ! āĻāĻ–āύ āĻ āĻŋāĻ• āĻ•āϰāĻŦā§‹
git commit --amend

āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•āϟāĻŋāĻ­ āĻāĻĄāĻŋāϟāϰ āϖ⧁āϞāĻŦ⧇, āϝ⧇āĻ–āĻžāύ⧇ āφāĻĒāύāĻŋ āĻŽā§‡āϏ⧇āϜāϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύāĨ¤

✅ āĻļ⧇āώ āĻ•āĻŽāĻŋāϟ undo āĻ•āϰ⧇ āφāĻŦāĻžāϰ āύāϤ⧁āύ āĻ•āĻŽāĻŋāϟ ​

bash
git reset --soft HEAD~1
git add .
git commit -m "āϏāĻ āĻŋāĻ• āĻ•āĻŽāĻŋāϟ āĻŽā§‡āϏ⧇āϜ āĻĻāĻŋā§Ÿā§‡ āφāĻŦāĻžāϰ āĻ•āϰāϞāĻžāĻŽ"
git reset --soft HEAD~1
git add .
git commit -m "āϏāĻ āĻŋāĻ• āĻ•āĻŽāĻŋāϟ āĻŽā§‡āϏ⧇āϜ āĻĻāĻŋā§Ÿā§‡ āφāĻŦāĻžāϰ āĻ•āϰāϞāĻžāĻŽ"

✅ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āϰāĻŋāĻŽā§‹āĻŸā§‡ push āĻ•āϰ⧇ āĻĢ⧇āϞ⧇āύ? ​

āϤāĻžāĻšāϞ⧇ --force āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ āĻŋāĻ• āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

bash
git reset --soft HEAD~1
git commit -m "āϏāĻ‚āĻļā§‹āϧāĻŋāϤ āĻ•āĻŽāĻŋāϟ"
git push --force
git reset --soft HEAD~1
git commit -m "āϏāĻ‚āĻļā§‹āϧāĻŋāϤ āĻ•āĻŽāĻŋāϟ"
git push --force

âš ī¸ āϏāϤāĻ°ā§āĻ•āϤāĻž:

āϟāĻŋāĻŽā§‡ āĻ•āĻžāϜ āĻ•āϰāϞ⧇ --force āĻŦā§āϝāĻŦāĻšāĻžāϰ āφāϗ⧇ āϟāĻŋāĻŽāĻŽā§‡āϟāĻĻ⧇āϰ āϏāĻ™ā§āϗ⧇ āφāϞ⧋āϚāύāĻž āĻ•āϰ⧇ āĻ•āϰ⧁āύāĨ¤

✅ āĻ•āĻŽāĻŋāϟ āĻŦāĻžāϤāĻŋāϞ āĻ•āϰ⧇ stash āĻ āϰāĻžāĻ–āϤ⧇ āϚāĻžāύ? ​

bash
git reset --mixed HEAD~1
git stash
git reset --mixed HEAD~1
git stash

āĻāĻ–āύ āϏāĻŦ āĻ•āĻžāϜ stash āĻšā§Ÿā§‡ āϗ⧇āϞ, āĻĒāϰ⧇ git stash apply āĻĻāĻŋā§Ÿā§‡ āĻĢ⧇āϰāϤ āφāύāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύāĨ¤

🧠 HEAD~1 āĻŽāĻžāύ⧇ āϕ⧀? ​

HEAD āĻšāϞ⧋ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻ•āĻŽāĻŋāϟāĨ¤ HEAD~1 āĻŽāĻžāύ⧇ āĻāĻ• āϧāĻžāĻĒ āφāϗ⧇āϰ āĻ•āĻŽāĻŋāϟāĨ¤

✅ āφāϰ⧇āĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ — āĻāĻ•āϏāĻžāĻĨ⧇ ⧍āϟāĻž āĻ•āĻŽāĻŋāϟ undo ​

bash
git reset --soft HEAD~2
git reset --soft HEAD~2

āĻļ⧇āώ ⧍āϟāĻŋ āĻ•āĻŽāĻŋāϟ āĻŦāĻžāϤāĻŋāϞ āĻšāĻŦ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ•āĻžāϜ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤

✅ āĻļ⧇āώ āĻ•āĻŽāĻŋāĻŸā§‡ āϭ⧁āϞ āĻ•āϰ⧇ sensitive āϤāĻĨā§āϝ (āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ) āϚāϞ⧇ āϗ⧇āϛ⧇? ​

bash
git reset --hard HEAD~1
git push origin main --force
git reset --hard HEAD~1
git push origin main --force

āĻāϰ āĻĒāϰ .gitignore āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇ āĻāĻŦāĻ‚ credentials rotate āĻ•āϰ⧇ āĻĢ⧇āϞ⧁āύāĨ¤

🔚 āωāĻĒāϏāĻ‚āĻšāĻžāϰ ​

Git-āĻ āϭ⧁āϞ āĻ•āĻŽāĻŋāϟ undo āĻ•āϰāĻž āϖ⧁āĻŦāχ āĻĻāϰāĻ•āĻžāϰāĻŋ āĻ“ āĻĒā§āϰāĻžā§Ÿ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ⧇āϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāύāĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āύāĻŋāĻšā§‡āϰ āϜāĻŋāύāĻŋāϏāϗ⧁āϞ⧋ āĻŽāύ⧇ āϰāĻžāϖ⧇āύ, āϤāĻžāĻšāϞ⧇ āĻĻā§āϰ⧁āϤ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āĻ¨â€”

āĻ•āĻŋ āĻ•āϰāϤ⧇ āϚāĻžāύāĻ•āĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ
āĻļ⧁āϧ⧁ āĻ•āĻŽāĻŋāϟ āĻŦāĻžāϤāĻŋāϞ, āĻ•āĻžāϜ āϰāĻžāĻ–āĻŦ⧇āύ--soft
āĻ•āĻŽāĻŋāϟ + āĻ¸ā§āĻŸā§‡āϜ āĻŦāĻžāϤāĻŋāϞ, āĻ•āĻžāϜ āϰāĻžāĻ–āĻŦ⧇āύ--mixed
āĻ•āĻŽāĻŋāϟ + āĻĢāĻžāχāϞ āĻšā§‡āĻžā§āϜ āĻŦāĻžāĻĻ āĻĻāĻŋāϤ⧇ āϚāĻžāύ--hard
āĻļ⧁āϧ⧁ āĻŽā§‡āϏ⧇āϜ āĻŦāĻĻāϞāĻžāϤ⧇ āϚāĻžāύ--amend

Released under the MIT License.