Skip to content

đŸŽ¯ git rebase āϕ⧀? ​

git rebase Git-āĻāϰ āĻāĻ•āϟāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ, āϝāĻž āĻāĻ• āĻŦā§āϰāĻžāĻžā§āĻšā§‡āϰ āχāϤāĻŋāĻšāĻžāϏāϕ⧇ āĻ…āĻ¨ā§āϝ āĻŦā§āϰāĻžāĻžā§āĻšā§‡āϰ āĻļ⧇āώ āĻ•āĻŽāĻŋāĻŸā§‡āϰ āĻĒāϰ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ āĻ•āϰ⧇āĨ¤

āϏāĻšāϜāĻ­āĻžāĻŦ⧇ āĻŦāϞāϞ⧇:

"āφāĻŽāĻžāϰ āĻ•āĻžāϜāϟāĻž āϝ⧇āύ āĻļ⧇āώ āĻšā§Ÿ main āĻŦā§āϰāĻžāĻžā§āĻšā§‡āϰ āϏāĻ°ā§āĻŦāĻļ⧇āώ āφāĻĒāĻĄā§‡āĻŸā§‡āϰ āĻĒāϰ⧇ — āĻāĻŽāύāĻ­āĻžāĻŦ⧇ āχāϤāĻŋāĻšāĻžāϏ āϏāĻžāϜāĻžāĻ“āĨ¤"

📌 git rebase āϕ⧇āύ āĻĻāϰāĻ•āĻžāϰ? ​

  • āχāϤāĻŋāĻšāĻžāϏ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āϰāĻžāĻ–āϤ⧇
  • merge āĻāϰ āĻŽāϤ⧋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ•āĻŽāĻŋāϟ āύāĻž āĻ•āϰ⧇ āϏāϰāϞ āχāϤāĻŋāĻšāĻžāϏ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇
  • Pull request-āĻāϰ āφāϗ⧇ āĻ•āĻŽāĻŋāϟāϗ⧁āϞ⧋ āϏ⧁āĻ¨ā§āĻĻāϰāĻ­āĻžāĻŦ⧇ āϏāĻžāϜāĻžāϤ⧇

🆚 merge vs rebase ​

āĻŦāĻŋāώ⧟mergerebase
āύāϤ⧁āύ commit āϤ⧈āϰāĻŋ āĻšā§Ÿâœ… (āĻāĻ•āϟāĻž merge commit)❌ (āĻĒ⧁āϰāύ⧋ commit-āϗ⧁āϞ⧋āϕ⧇ āφāĻŦāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧇)
āχāϤāĻŋāĻšāĻžāϏ āϕ⧇āĻŽāύ āĻšā§ŸāĻļāĻžāĻ–āĻžāĻŦāĻŋāĻ­āĻ•ā§āϤ (branching history)āϏāϰāϞ (linear history)
āϏāĻšāϜāĻšā§āϝāĻžāρāĻāĻ•āϟ⧁ āϜāϟāĻŋāϞ
Pull Request āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŽāĻžāĻā§‡āĻŽāĻ§ā§āϝ⧇āĻŦ⧇āĻļāĻŋ āϜāύāĻĒā§āϰāĻŋ⧟

📌 Basic Rebase Example ​

āϧāϰāĻŋ āφāĻĒāύāĻžāϰ main āĻ āφāϛ⧇ āĻāχ commit:

A---B---C  (main)
A---B---C  (main)

āĻāĻŦāĻ‚ feature āĻŦā§āϰāĻžāĻžā§āĻšā§‡ āφāϛ⧇:

A---B---C  (main)
         \
          D---E  (feature)
A---B---C  (main)
         \
          D---E  (feature)

āĻāĻ–āύ āφāĻĒāύāĻŋ feature āĻŦā§āϰāĻžāĻžā§āĻšā§‡ āĻ—āĻŋā§Ÿā§‡ āϚāĻžāϞāĻžāύ:

bash
git rebase main
git rebase main

Git āĻ•āϰāĻŦ⧇:

A---B---C---D'---E'  (feature)
A---B---C---D'---E'  (feature)

āĻŽāĻžāύ⧇, D āĻāĻŦāĻ‚ E āϕ⧇ C āĻāϰ āĻĒāϰ āύāϤ⧁āύ āĻ•āϰ⧇ āĻŦāϏāĻžāĻŦ⧇āĨ¤

🔧 Rebase āĻ•āϰāĻžāϰ āϧāĻžāĻĒ â€‹

bash
git checkout feature
git rebase main
git checkout feature
git rebase main

🔁 āφāĻĒāύāĻžāϰ āĻ•āĻŽāĻŋāϟāϗ⧁āϞ⧋ main-āĻāϰ āĻĒāϰ⧇ āύāĻŋā§Ÿā§‡ āϝāĻžāĻŦ⧇āĨ¤

âš”ī¸ Conflict āĻšāϞ⧇ āϕ⧀ āĻ•āϰāĻŦ⧇āύ? ​

bash
# āĻĢāĻžāχāϞ āĻāĻĄāĻŋāϟ āĻ•āϰ⧇ āĻ āĻŋāĻ• āĻ•āϰ⧁āύ
git add .

# āϤāĻžāϰāĻĒāϰ
git rebase --continue
# āĻĢāĻžāχāϞ āĻāĻĄāĻŋāϟ āĻ•āϰ⧇ āĻ āĻŋāĻ• āĻ•āϰ⧁āύ
git add .

# āϤāĻžāϰāĻĒāϰ
git rebase --continue

āĻŦāĻ¨ā§āϧ āĻ•āϰāϤ⧇ āϚāĻžāχāϞ⧇:

bash
git rebase --abort
git rebase --abort

đŸ§Ē āωāĻĻāĻžāĻšāϰāĻŖ ā§§: āϞ⧋āĻ•āĻžāϞ āĻŦā§āϰāĻžāĻžā§āϚ main-āĻāϰ āϏāĻžāĻĨ⧇ āφāĻĒāĻĄā§‡āϟ āϰāĻžāĻ–āĻž ​

bash
git checkout feature
git fetch origin
git rebase origin/main
git checkout feature
git fetch origin
git rebase origin/main

âžĄī¸ main āĻāϰ āϏāĻ°ā§āĻŦāĻļ⧇āώ āφāĻĒāĻĄā§‡āĻŸā§‡āϰ āĻĒāϰ⧇ āφāĻĒāύāĻžāϰ āĻ•āĻžāϜ āĻŦāϏāĻžāύ⧋ āĻšāĻŦ⧇āĨ¤

đŸ§Ē āωāĻĻāĻžāĻšāϰāĻŖ ⧍: rebase āĻ•āϰ⧇ Push ​

bash
git rebase main
git push --force-with-lease
git rebase main
git push --force-with-lease

âžĄī¸ āχāϤāĻŋāĻšāĻžāϏ āĻĒāĻžāĻ˛ā§āĻŸā§‡āϛ⧇ āĻŦāϞ⧇, āφāĻĒāύāĻžāϕ⧇ force push āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

đŸ§Ē āωāĻĻāĻžāĻšāϰāĻŖ ā§Š: āχāĻ¨ā§āϟāĻžāĻ°â€Œā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­ Rebase āĻĻāĻŋā§Ÿā§‡ āĻ•āĻŽāĻŋāϟ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ ​

bash
git rebase -i HEAD~3
git rebase -i HEAD~3

âžĄī¸ āĻļ⧇āώ ā§ŠāϟāĻŋ āĻ•āĻŽāĻŋāϟāϕ⧇ āφāĻĒāύāĻŋ āĻāĻ•āϏāĻžāĻĨ⧇ squash, edit, drop āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

pick 123abc Add login form
pick 456def Fix typo
pick 789ghi Add validation

# āφāĻĒāύāĻŋ āϚāĻžāχāϞ⧇ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:
squash 456def
squash 789ghi
pick 123abc Add login form
pick 456def Fix typo
pick 789ghi Add validation

# āφāĻĒāύāĻŋ āϚāĻžāχāϞ⧇ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:
squash 456def
squash 789ghi

âžĄī¸ āϏāĻŦ āĻāĻ• āĻ•āϰ⧇ āĻāĻ•āϟāĻž āϏ⧁āĻ¨ā§āĻĻāϰ āĻ•āĻŽāĻŋāϟ āĻŦāĻžāύāĻŋā§Ÿā§‡ āĻĢ⧇āϞ⧁āύāĨ¤

đŸ§Ē āωāĻĻāĻžāĻšāϰāĻŖ ā§Ē: rebase --onto āĻĻāĻŋā§Ÿā§‡ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϜāĻžā§ŸāĻ—āĻžā§Ÿ āĻŦāϏāĻžāύ⧋ ​

āϧāϰāĻŋ āφāĻĒāύāĻžāϰ āĻāχ āχāϤāĻŋāĻšāĻžāϏ:

A---B---C (main)
     \
      D---E (feature)
A---B---C (main)
     \
      D---E (feature)

āĻāĻ–āύ āφāĻĒāύāĻŋ feature āĻāϰ D āĻŦāĻžāĻĻ āĻĻāĻŋā§Ÿā§‡ āĻļ⧁āϧ⧁ E āϕ⧇ C āĻāϰ āĻĒāϰ⧇ āĻŦāϏāĻžāϤ⧇ āϚāĻžāύ:

bash
git checkout feature
git rebase --onto main D
git checkout feature
git rebase --onto main D

āĻĢāϞāĻžāĻĢāϞ:

A---B---C---E' (feature)
A---B---C---E' (feature)

đŸ§Ē āωāĻĻāĻžāĻšāϰāĻŖ ā§Ģ: āĻ…āĻ¨ā§āϝāĻĻ⧇āϰ PR review āĻ•āϰāĻžāϰ āĻĒāϰ rebase ​

bash
git checkout feature
git fetch origin
git rebase origin/main
git push --force-with-lease
git checkout feature
git fetch origin
git rebase origin/main
git push --force-with-lease

âžĄī¸ āĻāϟāĻž āĻ•āϰāĻžāϰ āĻĢāϞ⧇ āφāĻĒāύāĻžāϰ Pull Request āĻ…āύ⧇āĻ• āĻĒāϰāĻŋāĻšā§āĻ›āĻ¨ā§āύ āĻĻ⧇āĻ–āĻžāĻŦ⧇āĨ¤

đŸ§¯ āϭ⧁āϞ āĻ•āϰāϞ⧇ āϕ⧀ āĻ•āϰāĻŦ⧇āύ? ​

bash
git rebase --abort
git rebase --abort

âžĄī¸ rebase āϚāϞāĻžāĻ•āĻžāϞ⧀āύ āϭ⧁āϞ āĻšāϞ⧇ āĻāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāϰāĻŋā§Ÿā§‡ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻ…āĻĨāĻŦāĻž

bash
git reflog
git reset --hard <old-commit-id>
git reflog
git reset --hard <old-commit-id>

âžĄī¸ āφāϗ⧇āϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻĢāĻŋāϰāĻŋā§Ÿā§‡ āφāύ⧁āύāĨ¤

✅ āĻ•āĻ–āύ rebase āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ? ​

āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋrebase āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ?
āφāĻĒāύāĻŋ āĻāĻ•āĻž āĻ•āĻžāϜ āĻ•āϰāϛ⧇āĻ¨âœ”ī¸ āĻšā§āϝāĻžāρ
āϟāĻŋāĻŽā§‡ āĻ•āĻžāϜ āĻ•āϰāϛ⧇āύ āĻāĻŦāĻ‚ force push āĻ•āϰāĻž āϝāĻžāĻŦā§‡âš ī¸ āĻšā§āϝāĻžāρ, āϏāϤāĻ°ā§āĻ• āĻĨāĻžāϕ⧁āύ
āĻ…āύ⧇āĻ• āĻ…āĻ—ā§‹āĻ›āĻžāϞ⧋ commitâœ”ī¸ āĻšā§āϝāĻžāρ, āχāĻ¨ā§āϟāĻžāĻ°â€Œā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­ rebase
production/history āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āϜāϰ⧁āϰāĻŋ❌ āύāĻž

✅ Rebase āĻ•āϰāĻžāϰ āύāĻŋ⧟āĻŽ āϟāĻŋāĻŽā§‡ (Best Practice) ​

  • āϏāĻ°ā§āĻŦāĻĻāĻž --force-with-lease āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤
  • āĻ…āĻ¨ā§āϝāĻĻ⧇āϰ āĻ•āĻžāĻœā§‡āϰ āĻ“āĻĒāϰ rebase āĻ•āϰāĻŦ⧇āύ āύāĻž āϝāĻĻāĻŋ āύāĻž āφāĻĒāύāĻŋ āĻāĻ•āĻž āĻ•āĻžāϜ āĻ•āϰ⧇āύāĨ¤
  • main āĻŦāĻž master āĻŦā§āϰāĻžāĻžā§āĻšā§‡ āĻ•āĻ–āύāĻ“ rebase āĻ•āϰāĻŦ⧇āύ āύāĻžāĨ¤

🧭 āĻāĻ•āϟāĻŋ āĻĒā§‚āĻ°ā§āĻŖ rebase workflow āωāĻĻāĻžāĻšāϰāĻŖ ​

bash
git checkout feature/cart-update
git fetch origin
git rebase origin/main
# conflict āĻšāϞ⧇ āĻĢāĻŋāĻ•ā§āϏ āĻ•āϰ⧇:
git add .
git rebase --continue
# āĻļ⧇āώ⧇
git push --force-with-lease
git checkout feature/cart-update
git fetch origin
git rebase origin/main
# conflict āĻšāϞ⧇ āĻĢāĻŋāĻ•ā§āϏ āĻ•āϰ⧇:
git add .
git rebase --continue
# āĻļ⧇āώ⧇
git push --force-with-lease

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

  • ✅ git rebase āχāϤāĻŋāĻšāĻžāϏ āĻĒāϰāĻŋāĻšā§āĻ›āĻ¨ā§āύ āĻ“ āϞāĻŋāύāĻŋ⧟āĻžāϰ āϰāĻžāĻ–āϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤
  • ❗ āϏāϤāĻ°ā§āĻ•āĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ — āχāϤāĻŋāĻšāĻžāϏ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšā§ŸāĨ¤
  • 💡 merge āĻ“ rebase āĻĻ⧁āĻŸā§‹āχ āĻĻāϰāĻ•āĻžāϰāĻŋ, āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻŦ⧇āϛ⧇ āύāĻŋāύāĨ¤

Released under the MIT License.