Git Merge β
π§ Π‘ΡΡΡ β
Π‘Π»ΠΈΡΠ½ΠΈΠ΅ Π΄Π²ΡΡ Π²Π΅ΡΠΎΠΊ Π² ΠΎΠ΄Π½Ρ. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ rebase β ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΎΠ±Π΅ΠΈΡ Π²Π΅ΡΠΎΠΊ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ merge-ΠΊΠΎΠΌΠΌΠΈΡ.
| Merge | Rebase | |
|---|---|---|
| ΠΡΡΠΎΡΠΈΡ | Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ | ΠΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ |
| Merge-ΠΊΠΎΠΌΠΌΠΈΡ | ΠΠ° (ΠΏΡΠΈ --no-ff) | ΠΠ΅Ρ |
| ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π΄Π»Ρ ΠΎΠ±ΡΠΈΡ Π²Π΅ΡΠΎΠΊ | β | β |
| Π§ΠΈΡΡΠΎΡΠ° ΠΈΡΡΠΎΡΠΈΠΈ | ΠΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½Π°Ρ | ΠΠΈΠ½Π΅ΠΉΠ½Π°Ρ |
π» ΠΠ°Π·ΠΎΠ²ΡΠΉ merge β
# ΠΠ»ΠΈΡΡ feature Π² ΡΠ΅ΠΊΡΡΡΡ Π²Π΅ΡΠΊΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ master)
git checkout master
git merge feature/add-authπ» Fast-forward vs --no-ff β
Fast-forward (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) β Π΅ΡΠ»ΠΈ master Π½Π΅ ΡΡΡΠ» Π²ΠΏΠ΅ΡΡΠ΄, ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΏΡΠΎΡΡΠΎ "ΠΏΡΠΈΠΊΠ»Π΅ΠΈΠ²Π°ΡΡΡΡ":
git merge feature/add-auth
# ΠΡΡΠΎΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ, merge-ΠΊΠΎΠΌΠΌΠΈΡΠ° Π½Π΅Ρ--no-ff β Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠ·Π΄Π°ΡΡ merge-ΠΊΠΎΠΌΠΌΠΈΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ff Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½:
git merge --no-ff feature/add-auth
# Π―Π²Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ "Merge branch 'feature/add-auth'" β Π²ΠΈΠ΄Π½ΠΎ Π² ΠΈΡΡΠΎΡΠΈΠΈΠΠ»Ρ
masterΠΈpreprodΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ--no-ffβ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ Π³Π΄Π΅ Π½Π°ΡΠΈΠ½Π°Π»Π°ΡΡ Π²Π΅ΡΠΊΠ°.
π» Squash merge β
Π‘ΠΊΠ»Π΅ΠΈΡΡ Π²ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ Π²Π΅ΡΠΊΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠ΅ΡΠ΅Π΄ ΠΌΠ΅ΡΠΆΠ΅ΠΌ:
git merge --squash feature/add-auth
git commit -m "[Auth] Add authentication flow"ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΠΊΠΎΠ³Π΄Π° Π² Π²Π΅ΡΠΊΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ WIP-ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΠΈ Ρ
ΠΎΡΠ΅ΡΡ ΡΠΈΡΡΡΠΉ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ Π² master.
π» Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² β
git merge feature/add-auth
# CONFLICT (content): Merge conflict in src/auth.php# ΠΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡ
git status
# ΠΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ» β Π½Π°ΠΉΡΠΈ ΠΌΠ°ΡΠΊΠ΅ΡΡ:
<<<<<<< HEAD
ΠΊΠΎΠ΄ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²Π΅ΡΠΊΠΈ (master)
=======
ΠΊΠΎΠ΄ ΠΈΠ· feature/add-auth
>>>>>>> feature/add-auth
# ΠΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡΡΠ½ΡΡ β ΡΠ±ΡΠ°ΡΡ ΠΌΠ°ΡΠΊΠ΅ΡΡ β ΠΎΡΡΠ°Π²ΠΈΡΡ Π½ΡΠΆΠ½ΡΠΉ ΠΊΠΎΠ΄
# ΠΠ°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ
git add src/auth.php
git merge --continue # ΠΈΠ»ΠΈ git commit# ΠΡΠΌΠ΅Π½ΠΈΡΡ merge ΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π΄ΠΎ:
git merge --abortπ» Merge ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ β
# ΠΠ°ΠΏΡΡΡΠΈΡΡ mergetool (vimdiff, vscode ΠΈ Π΄Ρ.)
git mergetool
# ΠΠ°ΡΡΡΠΎΠΈΡΡ VS Code ΠΊΠ°ΠΊ mergetool
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd 'code --wait $MERGED'π» ΠΡΠΎΡΠΌΠΎΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΌΠ΅ΡΠΆΠ΅ΠΌ β
# Π§ΡΠΎ Π²ΠΎΠΉΠ΄ΡΡ Π² merge (ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΈΠ· feature, ΠΊΠΎΡΠΎΡΡΡ
Π½Π΅Ρ Π² master)
git log master..feature/add-auth --oneline
# ΠΠ°ΠΊΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡ
git diff master...feature/add-auth --name-onlyβ οΈ ΠΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ β
- ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠ΅ΡΠΆΡ Π²
masterΠ½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ β ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π· PR --squashΠ½Π΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΡΠ·Ρ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΎΠΉ βgit branch -dΠΏΠΎΡΠΎΠΌ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π΅Π·-D- ΠΠΎΡΠ»Π΅
--no-ffmerge-ΠΊΠΎΠΌΠΌΠΈΡ Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΎ, Π½Π΅ ΠΎΡΡΠ°Π²Π»ΡΠΉ Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ git merge --abortΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ merge Π΅ΡΡ Π½Π΅ Π·Π°Π²Π΅ΡΡΡΠ½