Merging ਇੱਕ ਬ੍ਰਾਂਚ ਤੋਂ ਬਦਲਾਅ ਨੂੰ ਦੂਸਰੀ ਬ੍ਰਾਂਚ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਦੀ ਹੈ — ਆਮ ਤੌਰ 'ਤੇ ਇੱਕ ਪੂਰੀ ਕੀਤੀ ਗਈ feature branch ਨੂੰ main branch ਵਿੱਚ ਵਾਪਸ ਲਿਆਉਂਦੀ ਹੈ। Git ਬਹੁਤੀਆਂ merges ਨੂੰ ਆਪਣੇ ਆਪ ਹਲ ਕਰਦਾ ਹੈ, ਪਰ merge ਕਿਸਮਾਂ ਅਤੇ conflicts ਨੂੰ ਸਮਝਣਾ ਮਹੱਤਵਪੂਰਨ ਹੈ।
ਬੁਨਿਆਦੀ merge
git switch main # be on the branch you want to merge INTO
git merge feature-x # merge feature-x's changes into main
ਤੁਸੀਂ target branch ਵਿੱਚ ਸਵਿਚ ਕਰਦੇ ਹੋ (ਉਹ ਬ੍ਰਾਂਚ ਜੋ ਬਦਲਾਅ ਪ੍ਰਾਪਤ ਕਰ ਰਹੀ ਹੈ) ਅਤੇ source branch ਨੂੰ ਇਸ ਵਿੱਚ merge ਕਰਦੇ ਹੋ।
Fast-forward ਬਨਾਮ merge commit
FAST-FORWARD merge → if main hasn't changed since the branch was created, Git just
MOVES main's pointer forward to the branch's latest commit (no merge commit, linear)
MERGE COMMIT (three-way merge) → if BOTH branches have new commits, Git creates a new
"merge commit" combining them (has two parents) → preserves that a merge happened
→ git merge --no-ff forces a merge commit even when fast-forward is possible
Git fast-forward ਕਰਦਾ ਹੈ ਜਦੋਂ ਸੰਭਵ ਹੋ (ਪੋਇੰਟਰ ਨੂੰ ਸਿਰਫ਼ ਅੱਗੇ ਵਧਾਉਂਦਾ ਹੈ) ਜਾਂ ਇੱਕ merge commit ਬਣਾਉਂਦਾ ਹੈ (ਦੋ ਪੇਰੰਟਸ ਦੇ ਨਾਲ) ਜਦੋਂ ਦੋਨੋਂ ਬ੍ਰਾਂਚਾਂ ਵੱਖ ਹਾਂ।
Merge conflicts
A CONFLICT happens when both branches changed the SAME lines differently — Git can't
auto-decide which to keep, so it asks YOU to resolve:
<<<<<<< HEAD
the version from the current branch (main)
=======
the version from the branch being merged (feature-x)
>>>>>>> feature-x
# resolve: edit the file to the desired result, remove the markers, then:
git add <file> # mark the conflict resolved
git commit # complete the merge
# git merge --abort # or cancel the merge entirely
Conflicts ਤਦ ਹੁੰਦੀਆਂ ਹਨ ਜਦੋਂ ਦੋਨੋਂ ਬ੍ਰਾਂਚਾਂ ਇੱਕੋ ਲਾਈਨਾਂ ਨੂੰ ਬਦਲਦੀਆਂ ਹਨ — Git ਉਹਨਾਂ ਨੂੰ ਚਿਹਨਿਤ ਕਰਦਾ ਹੈ ਅਤੇ ਤੁਸੀਂ ਦਸਤੀ ਤੌਰ 'ਤੇ ਸਹੀ ਨਤੀਜਾ ਚੁਣਦੇ ਹੋ, ਫਿਰ stage ਕਰਦੇ ਹੋ ਅਤੇ commit ਕਰਦੇ ਹੋ।
ਇਹ ਮਾਇਨੇ ਕਿਉਂ ਰੱਖਦਾ ਹੈ
Merging ਨੂੰ ਸਮਝਣਾ ਜ਼ਰੂਰੀ ਹੈ ਕਿਉਂਕਿ ਬ੍ਰਾਂਚ ਬਦਲਾਅ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨਾ ਸਹਿਯੋਗੀ Git workflows ਦਾ ਇੱਕ ਬੁਨਿਆਦੀ, ਲਗਾਤਾਰ ਹਿੱਸਾ ਹੈ, ਇਸ ਲਈ ਇਹ ਜਾਣਨਾ ਕਿ ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ (conflicts ਸਮੇਤ) ਰੋਜ਼ਾਨਾ ਗਿਆਨ ਜ਼ਰੂਰੀ ਹੈ। Merging ਉਹ ਤਰੀਕਾ ਹੈ ਜਿਸ ਨਾਲ ਪੂਰੀ ਕੀਤੀ ਗਈ ਕਾਰਜ (ਆਮ ਤੌਰ 'ਤੇ feature branches) main branch ਵਿੱਚ ਏਕੀਕ ਕਿਆ ਜਾਂਦਾ ਹੈ — ਬਦਲਾਅ ਨੂੰ ਇਕੱਠਾ ਲਿਆਉਣ ਦਾ ਰੁਟੀਨ ਕੰਮ ਜੋ ਟੀਮ ਵਿਕਾਸ ਵਿੱਚ ਲਗਾਤਾਰ ਹੁੰਦਾ ਹੈ।
fast-forward merge (Git ਸਿਰਫ਼ ਪੋਇੰਟਰ ਨੂੰ ਅੱਗੇ ਵਧਾਉਂਦਾ ਹੈ ਜਦੋਂ target diverge ਨਹੀਂ ਹੋਈ, ਇਤਿਹਾਸ ਨੂੰ ਲਿਨੀਅਰ ਰੱਖਦਾ ਹੈ) ਅਤੇ merge commit (ਇੱਕ three-way merge ਜੋ ਇੱਕ ਨਵਾਂ commit ਬਣਾਉਂਦਾ ਹੈ ਦੋ parents ਦੇ ਨਾਲ ਜਦੋਂ ਦੋਨੋਂ branches ਦੇ ਨਵੇਂ commits ਹਾਂ, ਇਹ ਰਿਕਾਰਡ ਕਰਦਾ ਹੈ ਕਿ ਇੱਕ merge ਹੋਈ) ਵਿਚਕਾਰ ਅੰਤਰ ਨੂੰ ਸਮਝਣਾ ਸਪੱਸ਼ਟ ਕਰਦਾ ਹੈ ਕਿ Git ਬਦਲਾਅ ਨੂੰ ਕਿਵੇਂ ਏਕੀਕ ਕਰਦਾ ਹੈ ਅਤੇ ਨਤੀਜੇ ਵਾਲਾ ਇਤਿਹਾਸ ਕਿਸ ਤਰ੍ਹਾਂ ਲਗਦਾ ਹੈ।
em ਤੱਤਪਰਮ ਤੌਰ 'ਤੇ, merge conflicts ਨੂੰ ਸਮਝਣਾ — ਜੋ ਤਦ ਹੁੰਦੀਆਂ ਹਨ ਜਦੋਂ ਦੋਨੋਂ ਬ੍ਰਾਂਚਾਂ ਇੱਕੋ ਲਾਈਨਾਂ ਨੂੰ ਵੱਖ-ਵੱਖ ਢੰਗ ਨਾਲ ਬਦਲਦੀਆਂ ਹਨ, ਤਾਂ Git ਆਪੇ ਫ਼ੈਸਲਾ ਨਹੀਂ ਕਰ ਸਕਦਾ ਅਤੇ ਤੁਹਾਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਕਹਿੰਦਾ ਹੈ — ਮਹੱਤਵਪੂਰਨ ਵਿਹਾਰਕ ਗਿਆਨ ਹੈ: conflicts ਸਹਿਯੋਗ ਦਾ ਇੱਕ ਆਮ, ਅਨਿਵਾਰਜ ਹਿੱਸਾ ਹੈ, ਅਤੇ ਜਾਣਨਾ ਕਿ conflict markers (<<<<<<<, =======, >>>>>>>) ਨੂੰ ਕਿਵੇਂ ਪਛਾਣਨਾ ਹੈ, ਫਾਈਲ ਨੂੰ ਸਹੀ ਨਤੀਜੇ ਲਈ ਸੰਪਾਦਿਤ ਕਰਨਾ ਹੈ, ਅਤੇ merge ਮੁਕੰਮਲ ਕਰਨਾ ਹੈ (stage ਅਤੇ commit) ਇੱਕ ਜ਼ਰੂਰੀ ਹੁਨਰ ਹੈ ਜੋ ਅਕਸਰ ਉਹਨਾਂ ਲਈ ਜ਼ਿਰਾ ਦਾ ਸਰੋਤ ਹੈ ਜੋ ਇਸਨੂੰ ਨਹੀਂ ਸਮਝਦੇ।
ਕਿਉਂਕਿ merging ਦੁਆਰਾ ਬ੍ਰਾਂਚ ਬਦਲਾਅ ਨੂੰ ਏਕੀਕ ਕਰਨਾ ਸਹਿਯੋਗੀ ਵਿਕਾਸ ਵਿੱਚ ਬੁਨਿਆਦੀ ਅਤੇ ਲਗਾਤਾਰ ਹੈ, ਅਤੇ ਕਿਉਂਕਿ merge ਕਿਸਮਾਂ ਅਤੇ ਖਾਸ ਕਰ ਕੇ conflicts ਨੂੰ ਹੱਲ ਕਰਨਾ ਬਦਲਾਅ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਜ਼ਰੂਰੀ ਹੈ (ਇੱਕ ਰੁਟੀਨ, ਅਨਿਵਾਰਜ ਕਾਰਜ), merging ਕਿਵੇਂ ਕੰਮ ਕਰਦੀ ਹੈ ਨੂੰ ਸਮਝਣਾ — ਬੁਨਿਆਦੀ merges, fast-forward ਬਨਾਮ merge commits, ਅਤੇ conflict resolution — ਜ਼ਰੂਰੀ, ਅਕਸਰ ਲਾਗੂ ਕੀਤਾ ਜਾਣ ਵਾਲਾ Git ਗਿਆਨ ਹੈ, ਸਹਿਯੋਗ ਲਈ ਇੱਕ ਮੁੱਖ ਹੁਨਰ ਜਿੱਥੇ conflict resolution ਖਾਸ ਤੌਰ 'ਤੇ ਇੱਕ ਵਿਹਾਰਕ ਜ਼ਰੂਰਤ ਹੈ ਜੋ ਹਰ ਡਿਵੈਲਪਰ ਨੂੰ ਭਰੋਸੇ ਨਾਲ ਸੰਭਾਲਣਾ ਚਾਹੀਦਾ ਹੈ।
