Git merge kinds
Π Git ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ»ΠΈΡΠ½ΠΈΡ (merge), ΠΏΠΎΠΌΠΈΠΌΠΎ fast-forward ΠΈ no fast-forward. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ Π² ΡΠ°Π·Π½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ . ΠΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ»ΠΈΡΠ½ΠΈΡ:
1. Fast-forward Merge (Π‘Π»ΠΈΡΠ½ΠΈΠ΅ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠΎΡΠΊΠΎΠΉ)
ΠΡΠΎ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠ΅Π»Π΅Π²ΠΎΠΉ Π²Π΅ΡΠΊΠΈ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ, Π΅ΡΠ»ΠΈ ΠΈΡΡΠΎΡΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ ΠΈ ΡΠ΅Π»Π΅Π²Π°Ρ Π²Π΅ΡΠΊΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ². ΠΠ°ΠΊ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ.
2. No Fast-forward Merge (Π‘Π»ΠΈΡΠ½ΠΈΠ΅ Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΠΌΠΎΡΠΊΠΈ)
Git ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΈΡΡΠΎΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΡΠ»ΠΈΡΠ½ΠΈΠ΅. ΠΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ»ΠΈΡΠ½ΠΈΡ, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π² Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΈΡΡΠΎΡΠΈΠΈ.
3. Squash Merge (Π‘Π»ΠΈΡΠ½ΠΈΠ΅ Ρ "ΡΠ°Π·Π΄Π°Π²Π»ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ" ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ²)
Squash merge ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π²ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ Π² ΠΎΠ΄ΠΈΠ½ Π΅Π΄ΠΈΠ½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ Π² ΡΠ΅Π»Π΅Π²ΠΎΠΉ Π²Π΅ΡΠΊΠ΅. ΠΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠΈΡΡΡΡ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΡ ΠΈΡΡΠΎΡΠΈΡ Π±Π΅Π· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΌΠ΅Π»ΠΊΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ², ΡΠ΄Π΅Π»Π°Π½Π½ΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΡΠΈΡΠ΅ΠΉ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ Π½Π° Π²Π΅ΡΠΊΠ΅ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ, Π½ΠΎ Π²Π΅ΡΡ ΠΈΡ ΠΊΠΎΠ΄ΠΎΠ²ΡΠΉ Π²ΠΊΠ»Π°Π΄ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡΠ΅.
ΠΡΠΈΠΌΠ΅Ρ:
1. ΠΡΡΠΎΡΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ:
A -- B -- C (main)
\
D -- E -- F (feature)
2. ΠΠΎΡΠ»Π΅ squash-ΡΠ»ΠΈΡΠ½ΠΈΡ Π²ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΈΠ· feature
ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ Π² ΠΎΠ΄ΠΈΠ½:
A -- B -- C -- G (main)
ΠΠΎΠΌΠΌΠΈΡ G
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ· D
, E
ΠΈ F
.
ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ squash merge ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°:
git merge --squash feature-branch
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΡΡΠ½ΡΡ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ git commit
.
4. Rebase Merge (ΠΠ΅ΡΠ΅Π±Π°Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅)
Rebase Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΈΡΠ½ΠΈΡ "ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π΅Ρ" ΠΈΡΡΠΎΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²Π΅ΡΠΊΠΈ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ Π²Ρ Π½Π°ΡΠΈΠ½Π°Π»ΠΈ Π²Π΅ΡΠΊΡ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ° ΡΠ΅Π»Π΅Π²ΠΎΠΉ Π²Π΅ΡΠΊΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΠΈΡΡΠΎΡΠΈΡ Π±Π΅Π· ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΡΠ»ΠΈΡΠ½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ:
1. ΠΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠ΅ Π²Π΅ΡΠΊΡ feature
ΠΎΡ C
ΠΈ Π΄Π΅Π»Π°Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ²:
A -- B -- C (main)
\
D -- E -- F (feature)
2. ΠΠ° main
ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ:
A -- B -- C -- G -- H (main)
\
D -- E -- F (feature)
3. ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ rebase
Π²Π΅ΡΠΊΠ° feature
"ΠΏΠ΅ΡΠ΅Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ" Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ Π² main
:
A -- B -- C -- G -- H -- D' -- E' -- F' (main/feature)
ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ Π³ΡΠ°ΡΠΎΠ² ΠΈ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΠΉ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ»ΠΎΠΆΠ½ΠΈΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ². ΠΠΎΠΌΠ°Π½Π΄Π° Π΄Π»Ρ ΡΠ΅Π±Π΅ΠΉΡΠ°:
git rebase main
5. Three-way Merge (Π’ΡΡΡ ΡΡΠΎΡΠΎΠ½Π½Π΅Π΅ ΡΠ»ΠΈΡΠ½ΠΈΠ΅)
Π’ΡΡΡ ΡΡΠΎΡΠΎΠ½Π½Π΅Π΅ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΠ±Π΅ΠΈΡ Π²Π΅ΡΠΊΠ°Ρ Π±ΡΠ»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π²Π΅ΡΠΊΠΈ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Git ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ "ΠΎΠ±ΡΠΈΠΉ ΠΏΡΠ΅Π΄ΠΎΠΊ" (common ancestor) Π΄Π²ΡΡ Π²Π΅ΡΠΎΠΊ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ»ΠΈΡΠ½ΠΈΠ΅, ΡΠ°Π·ΡΠ΅ΡΠ°Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π² Π²Π΅ΡΠΊΠ°Ρ . ΠΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° fast-forward ΡΠ»ΠΈΡΠ½ΠΈΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ Git ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ:
1. ΠΡΡΠΎΡΠΈΡ Π΄Π²ΡΡ
Π²Π΅ΡΠΎΠΊ:
A -- B -- C (ΠΎΠ±ΡΠΈΠΉ ΠΏΡΠ΅Π΄ΠΎΠΊ)
| \
| D -- E (feature)
\
F -- G (main)
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΡΡ
ΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ ΡΠ»ΠΈΡΠ½ΠΈΡ, Git Π±Π΅ΡΡΡ ΠΊΠΎΠΌΠΌΠΈΡΡ C
, G
, ΠΈ E
, ΡΡΠΎΠ±Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ M
, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ:
A -- B -- C -- F -- G -- M (main)
\ /
D -- E
6. Octopus Merge (ΠΡΡΠΌΠΈΠ½ΠΎΠΆΡΠ΅ ΡΠ»ΠΈΡΠ½ΠΈΠ΅)
Octopus merge ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡΡ Π²Π΅ΡΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. ΠΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄ΠΎΠ±Π΅Π½, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π»ΠΊΠΈΡ Π²Π΅ΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠ»ΠΈΡΡ ΡΡΠ°Π·Ρ. ΠΡΠΎΡ ΡΠΈΠΏ ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΡΠ»ΠΈΡΠ½ΠΈΡ, Π΅ΡΠ»ΠΈ Π½Π΅Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ².
ΠΡΠΈΠΌΠ΅Ρ ΡΠ»ΠΈΡΠ½ΠΈΡ ΡΡΡΡ Π²Π΅ΡΠΎΠΊ:
git merge branch1 branch2 branch3
ΠΡΠ»ΠΈ Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΡΠΈΡ Π²Π΅ΡΠΊΠ°Ρ Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡ, ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ.
ΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΏΠΎΡΠΎΠ±?
- Fast-forward β ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΠΈΡΡΠΎΡΠΈΡ ΠΈ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ°.
- No fast-forward β ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΆΠ΅Π½ ΡΠ°ΠΌ ΡΠ°ΠΊΡ ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΈΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΠΈ.
- Squash merge β ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΡΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠΈ.
- Rebase β ΠΊΠΎΠ³Π΄Π° Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΠΈΡΡΠΎΡΠΈΡ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ.
- Three-way merge β ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΎΠ±Π΅ΠΈΡ Π²Π΅ΡΠΊΠ°Ρ .
- Octopus merge β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²Π΅ΡΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ².