đ¨ git push --force
āύāĻŋā§ā§ āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ â
git push --force
(āĻŦāĻž āϏāĻāĻā§āώā§āĻĒā§ git push -f
) Git-āĻāϰ āĻāĻāĻāĻŋ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠āĻāĻŽāĻžāύā§āĻĄ, āϝāĻž āϞā§āĻāĻžāϞ āĻŦā§āϰāĻžāĻā§āĻā§āϰ āĻāϤāĻŋāĻšāĻžāϏāĻā§ āĻā§āϰ āĻāϰ⧠āϰāĻŋāĻŽā§āĻ āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋāϤ⧠āĻĒāĻžāĻ āĻžā§âeven āϝāĻĻāĻŋ āϰāĻŋāĻŽā§āĻā§ āĻāĻŽāύ āĻāĻŽāĻŋāĻ āĻĨāĻžāĻā§ āϝāĻž āĻāĻĒāύāĻžāϰ āϞā§āĻāĻžāϞ⧠āύā§āĻāĨ¤
āĻāĻāĻž āĻā§āĻŦāĻ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠â āĻāĻŦāĻžāϰ āĻŦāĻŋāĻĒāĻā§āĻāύāĻāĻāĨ¤ āĻā§āϞāĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞ⧠āĻāĻĒāύāĻžāϰ āĻāĻŋāĻŽāĻŽā§āĻāĻĻā§āϰ āĻāĻžāĻ āĻŽā§āĻā§ āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
đ āϏāĻžāϧāĻžāϰāĻŖ git push
vs git push --force
â
git push | git push --force |
---|---|
āϰāĻŋāĻŽā§āĻ āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋāϤ⧠āύāϤā§āύ āĻāĻŽāĻŋāĻ āĻĒāĻžāĻ āĻžā§ āϝāĻĻāĻŋ āĻāĻā§āϰ āĻāϤāĻŋāĻšāĻžāϏ āĻŽāĻŋāϞ⧠| āϰāĻŋāĻŽā§āĻ āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋāϤ⧠āĻā§āϰ āĻāϰ⧠āϞā§āĻāĻžāϞā§āϰ āĻāϤāĻŋāĻšāĻžāϏ āĻŦāϏāĻžā§ |
āύāĻŋāϰāĻžāĻĒāĻĻ | āĻŦāĻŋāĻĒāĻā§āĻāύāĻ (āϏāϤāϰā§āĻāϤāĻžāϰ āϏāĻžāĻĨā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ) |
đ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āϏāĻžāϧāĻžāϰāĻŖ āϰā§āĻĒ â
git push --force origin <branch-name>
git push --force origin <branch-name>
āĻ āĻĨāĻŦāĻž
git push -f origin <branch-name>
git push -f origin <branch-name>
đ§ āĻāĻāύ git push --force
āĻĒā§āϰā§ā§āĻāύ āĻšā§? â
â ā§§. āĻāĻŽāĻŋāĻ amend āĻāϰāĻžāϰ āĻĒāϰ â
git commit --amend -m "Fix commit message"
git push --force
git commit --amend -m "Fix commit message"
git push --force
âĄī¸ āĻāĻā§āϰ āĻāĻŽāĻŋāĻ āĻŦāĻĻāϞ⧠āĻā§āϞā§, Git āϏāĻžāϧāĻžāϰāĻŖ push
āĻāϰāϤ⧠āĻĻā§ā§ āύāĻžāĨ¤ āϤāĻāύ --force
āĻĻāϰāĻāĻžāϰāĨ¤
â ⧍. Rebase āĻāϰāĻžāϰ āĻĒāϰ â
git pull --rebase origin main
git push --force
git pull --rebase origin main
git push --force
âĄī¸ Rebase āĻāϤāĻŋāĻšāĻžāϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§āĨ¤ āϤāĻžāĻ force push āĻĻāϰāĻāĻžāϰ āĻĒā§ā§āĨ¤
â ā§Š. āĻā§āϞ āĻāϰ⧠āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āĻĢāĻžāĻāϞ āĻŦāĻž āĻā§āϞ commit āĻāϰāϞ⧠â
git reset --hard HEAD~1
git push --force
git reset --hard HEAD~1
git push --force
âĄī¸ āĻāĻ āϧāĻžāĻĒ āĻĒā§āĻāύ⧠āĻāĻŋā§ā§ āĻāĻā§āϰ āĻāĻŽāĻŋāĻ āĻŦāĻžāϤāĻŋāϞ āĻāϰ⧠āĻā§āϰ āĻāϰ⧠āĻāĻĒāĻĄā§āĻ āĻĒāĻžāĻ āĻžāύā§āĨ¤
đĄ āĻāĻĻāĻžāĻšāϰāĻŖāϏāĻŽā§āĻš â
đ§Ē āĻāĻĻāĻžāĻšāϰāĻŖ ā§§: āĻā§āϞ commit āĻŽā§āĻā§ āĻĻāĻŋā§ā§ push āĻāϰāĻž â
git reset --hard HEAD~2
git push --force
git reset --hard HEAD~2
git push --force
âĄī¸ āĻļā§āώ ⧍āĻāĻŋ āĻāĻŽāĻŋāĻ āĻŦāĻžāϤāĻŋāϞ āĻāϰ⧠āϰāĻŋāĻŽā§āĻā§āĻ āĻŽā§āĻā§ āĻĢā§āϞāĻŦā§āĨ¤
đ§Ē āĻāĻĻāĻžāĻšāϰāĻŖ ⧍: history āϏāĻžāĻāĻŋā§ā§ āύā§āĻā§āĻž â
git rebase -i HEAD~3
# (commit squash āĻŦāĻž reorder)
git push --force
git rebase -i HEAD~3
# (commit squash āĻŦāĻž reorder)
git push --force
âĄī¸ āĻāĻŽāĻŋāĻāĻā§āϞ⧠merge āĻŦāĻž āϏāĻžāĻāĻŋā§ā§ āϰāĻŋāĻŽā§āĻā§ āĻā§āϰ āĻāϰ⧠āĻāĻĒāĻĄā§āĻ āĻĒāĻžāĻ āĻžāύā§āĨ¤
đ§Ē āĻāĻĻāĻžāĻšāϰāĻŖ ā§Š: PR-āĻāϰ āĻāϤāĻŋāĻšāĻžāϏ āϏā§āύā§āĻĻāϰ āĻāϰ⧠āϏāĻžāĻāĻžāύ⧠â
git rebase main
git push --force
git rebase main
git push --force
âĄī¸ pull request āĻŽāϰā§āĻ āĻāϰāĻžāϰ āĻāĻā§ āĻĒāϰāĻŋāĻā§āĻāύā§āύ āĻāϤāĻŋāĻšāĻžāϏ āϤā§āϰāĻŋāĨ¤
â ī¸ āĻŦāĻŋāĻĒāĻĻā§āϰ āĻāĻļāĻā§āĻāĻž: āĻā§āύ --force
āĻŦāĻŋāĻĒāĻā§āĻāύāĻ? â
- āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϰāĻŋāĻŽā§āĻā§ āĻāĻŽāύ āĻāĻŋāĻā§ āĻŽā§āĻā§ āĻĻā§āύ āϝāĻž āĻ āύā§āϝāϰāĻž āĻāϤāĻŋāĻŽāϧā§āϝ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻā§, āϤāĻžāĻšāϞ⧠āϤāĻžāϰāĻž conflict āĻŦāĻž data loss āĻĒā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
- āĻāĻŋāĻŽā§ āĻāĻžāĻ āĻāϰāĻžāϰ āϏāĻŽā§ unnecessary force push āĻāϰāϞ⧠āϏāĻšāĻāϰā§āĻŽā§āϰāĻž āĻŦāĻŋāĻā§āϰāĻžāύā§āϤ āĻšā§ā§ āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
â
āĻŦāĻŋāĻāϞā§āĻĒ: --force-with-lease
â
git push --force-with-lease
git push --force-with-lease
âĄī¸ āĻāĻāĻŋ --force
āĻāϰ āύāĻŋāϰāĻžāĻĒāĻĻ āĻŦāĻŋāĻāϞā§āĻĒāĨ¤ āĻāĻāĻŋ āĻāĻā§ āĻā§āĻ āĻāϰ⧠āύā§ā§ â āĻā§āĻ āϰāĻŋāĻŽā§āĻā§ āĻāĻŋāĻā§ āĻāĻĒāĻĄā§āĻ āĻāϰā§āĻā§ āĻāĻŋāύāĻžāĨ¤ āϝāĻĻāĻŋ āĻāϰ⧠āĻĨāĻžāĻā§, āϤāĻžāĻšāϞ⧠push
āĻšāĻŦā§ āύāĻžāĨ¤
đ āĻāĻāĻŋ āĻāĻŋāĻŽā§ āĻāĻžāĻ āĻāϰāĻžāϰ āϏāĻŽā§ --force
āĻāϰ āĻĨā§āĻā§ āĻ
āύā§āĻ āύāĻŋāϰāĻžāĻĒāĻĻāĨ¤
đ¯ āĻāĻŋāĻāĻžāĻŦā§ āĻŦā§āĻāĻŦā§āύ āĻāĻāύ --force
āĻāϰāĻž āĻ āĻŋāĻ? â
āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋ | --force āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ? |
---|---|
āĻāĻĒāύāĻŋ āĻāĻāĻžāĻ āĻāĻžāĻ āĻāϰāĻā§āύ | âī¸ āĻšā§āϝāĻžāĻ |
āĻāĻŋāĻŽā§ āĻāĻāĻžāϧāĻŋāĻ āĻĄā§āĻā§āϞāĻĒāĻžāϰ āĻāĻžāĻ āĻāϰāĻā§ | â ī¸ --force-with-lease āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ |
PR āĻāϰ āĻāĻā§āϰ āĻāĻŽāĻŋāĻ āĻ āĻŋāĻ āĻāϰāϤ⧠āĻāĻžāύ | âī¸ āĻšā§āϝāĻžāĻ, āϤāĻŦā§ āϏāϤāϰā§āĻ āĻšā§ā§ |
āĻ āύā§āϝ āĻā§āĻ āϏā§āĻ āĻŦā§āϰāĻžāĻā§āĻā§āĻ āĻāĻžāĻ āĻāϰāĻā§ | â āύāĻž, āύāĻž āĻŦā§āĻā§ āĻāϰāĻŦā§āύ āύāĻž |
đ§¯ āĻā§āϞ force-push āĻāϰ⧠āĻĢā§āϞāϞ⧠āĻā§ āĻāϰāĻŦā§āύ? â
- āĻāĻĒāύāĻžāϰ āϞā§āĻāĻžāϞ reflog āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻā§āϰ āĻ āĻŦāϏā§āĻĨāĻžā§ āĻĢāĻŋāϰā§āύ:
git reflog
git reset --hard <previous-commit-id>
git push --force
git reflog
git reset --hard <previous-commit-id>
git push --force
- āϰāĻŋāĻŽā§āĻ āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋ āĻŦā§āϝāĻžāĻāĻāĻĒ āĻĨāĻžāĻāϞ⧠restore āĻāϰā§āύāĨ¤
đ§ Workflow āĻāĻĻāĻžāĻšāϰāĻŖ: Safe force push â
# āύāϤā§āύ āĻŦā§āϰāĻžāĻā§āĻā§ āĻāĻžāĻ
git checkout -b feature/profile-ui
# āĻā§āϞ commit
git add .
git commit -m "Wrong files"
# Reset āĻāϰ⧠āϏāĻ āĻŋāĻ commit
git reset HEAD~1
git add .
git commit -m "Add user profile layout"
# Push with force (since history changed)
git push --force-with-lease origin feature/profile-ui
# āύāϤā§āύ āĻŦā§āϰāĻžāĻā§āĻā§ āĻāĻžāĻ
git checkout -b feature/profile-ui
# āĻā§āϞ commit
git add .
git commit -m "Wrong files"
# Reset āĻāϰ⧠āϏāĻ āĻŋāĻ commit
git reset HEAD~1
git add .
git commit -m "Add user profile layout"
# Push with force (since history changed)
git push --force-with-lease origin feature/profile-ui
đ āĻāĻĒāϏāĻāĻšāĻžāϰ â
đ git push --force
āĻāĻāĻāĻŋ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠āĻ
āϏā§āϤā§āϰāĨ¤ āĻāĻžāϞā§āĻāĻžāĻŦā§ āύāĻž āĻā§āύ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞ⧠āĻŦāĻŋāĻĒāĻĻ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ đ āϏāϰā§āĻŦāĻĻāĻž --force-with-lease
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻŦā§āĻĻā§āϧāĻŋāĻŽāĻžāύā§āϰ āĻāĻžāĻāĨ¤ đ āĻāĻāĻ āĻĒā§āϰāĻā§āĻā§āĻā§ āĻāĻāĻž āĻāĻžāĻ āĻāϰāϞ⧠--force
āĻā§āĻāĻāĻŋāĻŽā§āĻā§āϤ, āĻāĻŋāύā§āϤ⧠āĻāĻŋāĻŽā§ āĻāĻžāĻ āĻāϰāϞ⧠āϏāϤāϰā§āĻāϤāĻž āĻāϰā§āϰāĻŋāĨ¤