đ git revert āĻŦāύāĻžāĻŽ git reset â
Git-āĻ āĻāĻāύāĻ āĻāĻāύāĻ āĻāĻĒāύāĻŋ āĻāĻŽāύ āĻāĻāĻāĻŋ āĻ āĻŦāϏā§āĻĨāĻžāύ⧠āĻĒā§āĻāĻāĻžāύ, āϝā§āĻāĻžāύ⧠āĻĒā§āϰā§āĻŦā§āϰ āĻā§āύ āĻā§āϞ āĻāĻŽāĻŋāĻ āĻŦāĻžāϤāĻŋāϞ āĻŦāĻž āϏāĻāĻļā§āϧāύ āĻāϰāϤ⧠āĻšā§āĨ¤ āĻāĻāύā§āϝ Git āĻāĻŽāĻžāĻĻā§āϰ āĻĻā§āĻāĻŋ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠āĻā§āϞ āĻĻā§ā§:
git resetgit revert
āĻĻā§âāĻāĻŋāĻ āĻāĻŽāĻŋāĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āĻāĻŋāύā§āύāĻāĻžāĻŦā§āĨ¤
â āĻĻā§āϰā§āϤ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻā§āĻŦāĻŋāϞ: â
| āĻŦāĻŋāώ⧠| git reset | git revert |
|---|---|---|
| āĻāĻŽāĻŋāĻ āĻŽā§āĻā§ āĻĢā§āϞ⧠| â āĻšā§āϝāĻžāĻ | â āύāĻž |
| āύāϤā§āύ āĻāĻŽāĻŋāĻ āϤā§āϰāĻŋ āĻāϰ⧠| â āύāĻž (reset āĻļā§āϧ⧠HEAD āĻŦāĻĻāϞāĻžā§) | â āĻšā§āϝāĻžāĻ |
| Git History āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠| â āĻšā§āϝāĻžāĻ | â āύāĻž |
| āĻāĻŋāĻŽā§ āĻāĻžāĻā§āϰ āĻāύā§āϝ āύāĻŋāϰāĻžāĻĒāĻĻ | â āύāĻž | â āĻšā§āϝāĻžāĻ |
| āĻāĻā§āϰ commit āĻĢāĻŋāϰāĻŋā§ā§ āĻāύāĻž | â | â (āĻāĻŋāύā§āύāĻāĻžāĻŦā§) |
| Remote branch āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ | â āϏāϤāϰā§āĻ āĻĨāĻžāĻāϤ⧠āĻšā§ | â āύāĻŋāϰāĻžāĻĒāĻĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§ |
đ ī¸ git reset āĻā§? â
git reset āĻāĻāĻāĻŋ destructive operation, āϝāĻž āĻāĻĒāύāĻžāϰ āĻāĻŽāĻŋāĻ history āĻĨā§āĻā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻ
āĻāĻļ āĻĒā§āϰā§āĻĒā§āϰāĻŋ āĻŽā§āĻā§ āĻĻā§ā§ (āĻŦāĻŋāĻļā§āώ āĻāϰ⧠--hard āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞā§)āĨ¤
đ¯ āĻāĻĻāĻžāĻšāϰāĻŖ ā§§: āĻļā§āώ āĻāĻŽāĻŋāĻ āĻŽā§āĻā§ āĻĢā§āϞā§āύ (staged āĻĢāĻžāĻāϞāϏāĻš) â
git reset --soft HEAD~1git reset --soft HEAD~1đ¯ āĻāĻĻāĻžāĻšāϰāĻŖ ⧍: āĻļā§āώ āĻāĻŽāĻŋāĻ āĻāĻŦāĻ āϏā§āĻā§āĻāĻŋāĻ āĻŽā§āĻā§ āĻĢā§āϞā§āύ â
git reset --mixed HEAD~1git reset --mixed HEAD~1đ¯ āĻāĻĻāĻžāĻšāϰāĻŖ ā§Š: āϏāĻŦ āĻāĻŋāĻā§ āĻšāĻžāϰāĻŋā§ā§ āĻĢā§āϞā§āύ â
git reset --hard HEAD~1git reset --hard HEAD~1đ ī¸ git revert āĻā§? â
git revert āĻāĻāĻāĻŋ safe āĻ
āĻĒāĻžāϰā§āĻļāύāĨ¤ āĻāĻāĻŋ āĻāĻā§āϰ āĻā§āϞ āĻāĻŽāĻŋāĻāĻā§ "āĻŦāĻžāϤāĻŋāϞ" āĻāϰ⧠āύāϤā§āύ āĻāĻāĻāĻŋ āĻāϞā§āĻā§ āĻāĻŽāĻŋāĻ āϤā§āϰāĻŋ āĻāϰā§āĨ¤
đ¯ āĻāĻĻāĻžāĻšāϰāĻŖ ā§§: āĻļā§āώ āĻāĻŽāĻŋāĻ revert āĻāϰā§āύ â
git revert HEADgit revert HEADđ¯ āĻāĻĻāĻžāĻšāϰāĻŖ ⧍: āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāĻŽāĻŋāĻ revert āĻāϰā§āύ â
git revert d4e7a3fgit revert d4e7a3fđ āĻāĻāĻŋ āϏā§āĻ āĻāĻŽāĻŋāĻā§āϰ āĻŦāĻŋāĻĒāϰā§āϤ āĻāĻžāĻ āĻāϰ⧠āύāϤā§āύ āĻāĻāĻāĻŋ āĻāĻŽāĻŋāĻ āϤā§āϰāĻŋ āĻāϰāĻŦā§āĨ¤
đ§Ē āϤā§āϞāύāĻžāĻŽā§āϞāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ āĻāĻĻāĻžāĻšāϰāĻŖ â
đŦ āϧāϰā§āύ: āĻāĻĒāύāĻžāϰ Repo-āĻ¤ā§ ā§ŠāĻāĻŋ āĻāĻŽāĻŋāĻ āĻāĻā§ â
A --> B --> C (HEAD)A --> B --> C (HEAD)â
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ git reset --hard B āĻāϰā§āύ: â
A --> B (C āĻāĻŽāĻŋāĻ āĻĒā§āϰā§āĻĒā§āϰāĻŋ āĻāĻžā§ā§āĻŦ)A --> B (C āĻāĻŽāĻŋāĻ āĻĒā§āϰā§āĻĒā§āϰāĻŋ āĻāĻžā§ā§āĻŦ)â
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ git revert C āĻāϰā§āύ: â
A --> B --> C --> C' (C' = C āĻāϰ āĻŦāĻŋāĻĒāϰā§āϤ)A --> B --> C --> C' (C' = C āĻāϰ āĻŦāĻŋāĻĒāϰā§āϤ)â ī¸ āĻāĻŋāĻŽā§ āĻāĻžāĻ āĻāϰāĻžāϰ āϏāĻŽā§ āĻā§āĻļāϞ â
| āĻāĻžāĻā§āϰ āϧāϰāύ | reset āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ? | revert āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ? |
|---|---|---|
| āύāĻŋāĻā§āϰ local branch | â āĻšā§āϝāĻžāĻ | â āĻĒā§āϰā§ā§āĻāύ āύā§āĻ |
| āĻāĻŋāĻŽā§āϰ shared branch (āϝā§āĻŽāύ main) | â āύāĻž | â āĻ āĻŦāĻļā§āϝāĻ |
| mistake undo | â reset āĻāϰāĻž āϝāĻžā§ | â revert āĻāϰāĻžāĻ āϝāĻžā§ |
| Git history āĻĒāϰāĻŋāϏā§āĻāĻžāϰ āĻāϰāϤ⧠| â reset āĻāĻžāϞ | â āύāĻž |
đ§ reset vs revert āĻā§ āĻŦā§āĻāĻžāϰ āϏāĻšāĻ āĻāĻĒāĻžā§: â
| āĻĒā§āϰāĻļā§āύ | āĻāϤā§āϤāϰ |
|---|---|
| āĻāĻŽāĻŋ āĻāĻā§āϰ commit āĻŽā§āĻā§ āĻĢā§āϞāϤ⧠āĻāĻžāĻ | git reset |
| āĻāĻŽāĻŋ āĻāĻā§āϰ commit āĻāϰ effect āĻŦāĻžāϤāĻŋāϞ āĻāϰāϤ⧠āĻāĻžāĻ, history āϰā§āĻā§ | git revert |
| āĻāĻŽāĻŋ team āĻāϰ āϏāĻā§āĻā§ āĻāĻžāĻ āĻāϰāĻāĻŋ, remote branch āĻ push āĻāϰāϤ⧠āĻšāĻŦā§ | git revert |
| āĻāĻŽāĻŋ history āĻāĻāĻĻāĻŽ āĻĒāϰāĻŋāϏā§āĻāĻžāϰ āϰāĻžāĻāϤ⧠āĻāĻžāĻ, āĻļā§āϧ⧠āĻāĻŽāĻžāϰ local āĻ | git reset |
â āĻāĻŋāĻā§ āĻāϰāĻ āĻāĻĻāĻžāĻšāϰāĻŖ â
ā§§. āĻļā§āώ ⧍āĻāĻŋ āĻāĻŽāĻŋāĻ revert āĻāϰā§āύ â
git revert HEAD~1
git revert HEAD~1git revert HEAD~1
git revert HEAD~1⧍. āĻāĻāϏāĻžāĻĨā§ āĻā§ā§āĻāĻāĻŋ āĻāĻŽāĻŋāĻ revert āĻāϰā§āύ (range) â
git revert HEAD~3..HEADgit revert HEAD~3..HEADā§Š. āĻāĻāĻāĻŋ reset āĻāϰ⧠āĻāĻŦāĻžāϰ push āĻāϰāϤ⧠āĻāĻžāύ â
git reset --hard HEAD~1
git push origin main --forcegit reset --hard HEAD~1
git push origin main --forceâ ī¸ āϏāϤāϰā§āĻāϤāĻž: āĻāĻŋāĻŽā§ āύāĻž āĻĨāĻžāĻāϞ⧠āĻŦāĻž āĻŦā§āĻā§ āĻāϰāϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤
â Bonus Tip: Commit History āĻĻā§āĻā§āύ â
git log --onelinegit log --onelineâ āĻāĻĒāϏāĻāĻšāĻžāϰ â
| āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋ | āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ |
|---|---|
| āύāĻŋāĻā§ āĻā§āϞ āĻāϰā§āĻāĻŋ, remote āĻ push āĻāϰāĻŋāύāĻŋ | git reset |
| āĻā§āϞ āĻāϰā§āĻāĻŋ āĻāĻŦāĻ remote āĻ push āĻāϰā§āĻāĻŋ | git revert |
| āĻāϤāĻŋāĻšāĻžāϏ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāύāϤ⧠āĻāĻžāĻ | git reset |
| āĻāϤāĻŋāĻšāĻžāϏ āϰāĻžāĻāϤ⧠āĻāĻžāĻ āĻāĻŋāύā§āϤ⧠āĻāĻžāĻ āĻŦāĻžāϤāĻŋāϞ | git revert |
âī¸ āĻāĻĒāϏāĻāĻšāĻžāϰ āĻāĻĻāĻžāĻšāϰāĻŖ āϏāĻš â
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻŽāύ āĻ āĻŦāϏā§āĻĨāĻžā§ āĻĨāĻžāĻā§āύ:
- āĻā§āϞ āĻāϰā§
.envāĻĢāĻžāĻāϞ push āĻāϰ⧠āĻĢā§āϞā§āĻā§āύ - āĻāĻāύ āĻāĻĒāύāĻŋ history clear āĻāϰāϤ⧠āĻāĻžāύ
āϤāĻŦā§:
git reset --hard HEAD~1
git push --forcegit reset --hard HEAD~1
git push --forceāĻāĻŋāύā§āϤ⧠āϝāĻĻāĻŋ history āϰāĻžāĻāϤ⧠āĻāĻžāύ āĻāĻŦāĻ āĻļā§āϧ⧠effect āĻŦāĻžāϤāĻŋāϞ āĻāϰāϤ⧠āĻāĻžāύ:
git revert HEADgit revert HEAD