đ git revert
āĻŦāύāĻžāĻŽ git reset
â
Git-āĻ āĻāĻāύāĻ āĻāĻāύāĻ āĻāĻĒāύāĻŋ āĻāĻŽāύ āĻāĻāĻāĻŋ āĻ āĻŦāϏā§āĻĨāĻžāύ⧠āĻĒā§āĻāĻāĻžāύ, āϝā§āĻāĻžāύ⧠āĻĒā§āϰā§āĻŦā§āϰ āĻā§āύ āĻā§āϞ āĻāĻŽāĻŋāĻ āĻŦāĻžāϤāĻŋāϞ āĻŦāĻž āϏāĻāĻļā§āϧāύ āĻāϰāϤ⧠āĻšā§āĨ¤ āĻāĻāύā§āϝ Git āĻāĻŽāĻžāĻĻā§āϰ āĻĻā§āĻāĻŋ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠āĻā§āϞ āĻĻā§ā§:
git reset
git 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~1
git reset --soft HEAD~1
đ¯ āĻāĻĻāĻžāĻšāϰāĻŖ ⧍: āĻļā§āώ āĻāĻŽāĻŋāĻ āĻāĻŦāĻ āϏā§āĻā§āĻāĻŋāĻ āĻŽā§āĻā§ āĻĢā§āϞā§āύ â
git reset --mixed HEAD~1
git reset --mixed HEAD~1
đ¯ āĻāĻĻāĻžāĻšāϰāĻŖ ā§Š: āϏāĻŦ āĻāĻŋāĻā§ āĻšāĻžāϰāĻŋā§ā§ āĻĢā§āϞā§āύ â
git reset --hard HEAD~1
git reset --hard HEAD~1
đ ī¸ git revert
āĻā§? â
git revert
āĻāĻāĻāĻŋ safe āĻ
āĻĒāĻžāϰā§āĻļāύāĨ¤ āĻāĻāĻŋ āĻāĻā§āϰ āĻā§āϞ āĻāĻŽāĻŋāĻāĻā§ "āĻŦāĻžāϤāĻŋāϞ" āĻāϰ⧠āύāϤā§āύ āĻāĻāĻāĻŋ āĻāϞā§āĻā§ āĻāĻŽāĻŋāĻ āϤā§āϰāĻŋ āĻāϰā§āĨ¤
đ¯ āĻāĻĻāĻžāĻšāϰāĻŖ ā§§: āĻļā§āώ āĻāĻŽāĻŋāĻ revert āĻāϰā§āύ â
git revert HEAD
git revert HEAD
đ¯ āĻāĻĻāĻžāĻšāϰāĻŖ ⧍: āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāĻŽāĻŋāĻ revert āĻāϰā§āύ â
git revert d4e7a3f
git 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~1
git revert HEAD~1
git revert HEAD~1
⧍. āĻāĻāϏāĻžāĻĨā§ āĻā§ā§āĻāĻāĻŋ āĻāĻŽāĻŋāĻ revert āĻāϰā§āύ (range) â
git revert HEAD~3..HEAD
git revert HEAD~3..HEAD
ā§Š. āĻāĻāĻāĻŋ reset āĻāϰ⧠āĻāĻŦāĻžāϰ push āĻāϰāϤ⧠āĻāĻžāύ â
git reset --hard HEAD~1
git push origin main --force
git reset --hard HEAD~1
git push origin main --force
â ī¸ āϏāϤāϰā§āĻāϤāĻž: āĻāĻŋāĻŽā§ āύāĻž āĻĨāĻžāĻāϞ⧠āĻŦāĻž āĻŦā§āĻā§ āĻāϰāϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤
â Bonus Tip: Commit History āĻĻā§āĻā§āύ â
git log --oneline
git 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 --force
git reset --hard HEAD~1
git push --force
āĻāĻŋāύā§āϤ⧠āϝāĻĻāĻŋ history āϰāĻžāĻāϤ⧠āĻāĻžāύ āĻāĻŦāĻ āĻļā§āϧ⧠effect āĻŦāĻžāϤāĻŋāϞ āĻāϰāϤ⧠āĻāĻžāύ:
git revert HEAD
git revert HEAD