Git Rebase β
π§ Π‘ΡΡΡ β
ΠΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΠΊΠΎΠΌΠΌΠΈΡΡ Π²Π΅ΡΠΊΠΈ Π½Π° Π½ΠΎΠ²ΠΎΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΈΡΡΠΎΡΠΈΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ Π²Π΅ΡΠΊΠ° ΡΠΎΠ·Π΄Π°Π²Π°Π»Π°ΡΡ Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ master.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ merge β ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈΡΡΠΎΡΠΈΡ. Π’ΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ
Π²Π΅ΡΠΎΠΊ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π΄Π»Ρ ΠΎΠ±ΡΠΈΡ
(master, preprod, staging).
π» ΠΠ±Π½ΠΎΠ²ΠΈΡΡ Π²Π΅ΡΠΊΡ ΠΎΡ master β
Π‘Π°ΠΌΡΠΉ ΡΠ°ΡΡΡΠΉ ΡΠ»ΡΡΠ°ΠΉ β ΠΏΠΎΠ΄ΡΡΠ½ΡΡΡ ΡΠ²Π΅ΠΆΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ· master Π² feature-Π²Π΅ΡΠΊΡ:
git fetch origin
git rebase origin/masterπ» ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ rebase β
ΠΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ, ΡΠΊΠ»Π΅ΠΈΡΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ N ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ²:
git rebase -i HEAD~3 # ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 3 ΠΊΠΎΠΌΠΌΠΈΡΠ°Π ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ β ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ°:
pick a1b2c3 [Auth] Add login form β ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΊΠ°ΠΊ Π΅ΡΡΡ
squash d4e5f6 wip: fix typo β ΡΠΊΠ»Π΅ΠΈΡΡ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ
fixup g7h8i9 forgot semicolon β ΡΠΊΠ»Π΅ΠΈΡΡ, Π²ΡΠ±ΡΠΎΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
reword h0i1j2 old message β ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠΌΠΈΡ
drop k3l4m5 debug console.log β ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠΎΠΌΠΌΠΈΡ
edit n6o7p8 [Auth] Add JWT β ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΊΠΈ
squashβ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΠΊΠΎΠΌΠΌΠΈΡΡ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.fixupβ ΡΠΎ ΠΆΠ΅, Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ° Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
π» ΠΠΎΠ½ΡΠ»ΠΈΠΊΡ ΠΏΡΠΈ rebase β
# Git ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡΠ΅
# CONFLICT (content): Merge conflict in src/auth.php
# Π Π°Π·ΡΠ΅ΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ Π²ΡΡΡΠ½ΡΡ Π² ΡΠ°ΠΉΠ»Π΅, Π·Π°ΡΠ΅ΠΌ:
git add src/auth.php
git rebase --continue
# ΠΡΠΎΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ (ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎ):
git rebase --skip
# ΠΡΠΌΠ΅Π½ΠΈΡΡ rebase ΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ:
git rebase --abortπ» Force push ΠΏΠΎΡΠ»Π΅ rebase β
Rebase ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈΡΡΠΎΡΠΈΡ β ΠΎΠ±ΡΡΠ½ΡΠΉ push Π½Π΅ ΠΏΡΠΎΠΉΠ΄ΡΡ:
# ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ force push β Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ΅Ρ ΡΡΠΆΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ
git push origin feature/add-auth --force-with-lease
# ΠΠ±ΡΡΠ½ΡΠΉ --force β ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π²Π΅ΡΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ²ΠΎΡ
git push origin feature/add-auth --force
--force-with-leaseΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΡΠΎ remote Π½Π΅ ΡΡΡΠ» Π²ΠΏΠ΅ΡΡΠ΄ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ fetch.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉ Π΅Π³ΠΎ Π²ΠΌΠ΅ΡΡΠΎ--forceβ ΡΡΡΠ°Ρ ΠΎΠ²ΠΊΠ° ΠΎΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ Π·Π°ΡΠΈΡΠ°Π½ΠΈΡ ΡΡΠΆΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ².
π» Π‘Π±ΡΠΎΡ Π²Π΅ΡΠΊΠΈ Π΄ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ remote β
ΠΠΎΠ³Π΄Π° Π½Π°ΠΊΠΎΠΏΠΈΠ»ΡΡ ΠΌΡΡΠΎΡ ΠΈ ΠΏΡΠΎΡΠ΅ Π½Π°ΡΠ°ΡΡ ΡΠΈΡΡΠΎ:
git fetch origin
git reset --hard origin/master
# Π£Π΄Π°Π»ΠΈΡΡ Π½Π΅ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΏΠ°ΠΏΠΊΠΈ
git clean -fd
# Π£Π΄Π°Π»ΠΈΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈΠ· .gitignore (ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎ β ΡΠ΄Π°Π»ΠΈΡ .env)
git clean -fdx
git clean -fdxΡΠ΄Π°Π»ΠΈΡ Π²ΡΡ Π½Π΅ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π²ΠΊΠ»ΡΡΠ°Ρ.envβ ΡΠ΄Π΅Π»Π°ΠΉ Π±ΡΠΊΠ°ΠΏ.
β οΈ ΠΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ β
- ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ rebase
master,preprod,stagingβ ΡΠΎΠ»ΡΠΊΠΎ feature-Π²Π΅ΡΠΊΠΈ - ΠΠΎΡΠ»Π΅ rebase Π²ΡΠ΅Π³Π΄Π° Π½ΡΠΆΠ΅Π½
--force-with-lease, ΠΎΠ±ΡΡΠ½ΡΠΉ push ΡΠΏΠ°Π΄ΡΡ --forceΠ±Π΅Π·--with-leaseΠΎΠΏΠ°ΡΠ΅Π½ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ β ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΠ΅ΡΠ΅ΡΡ ΡΡΠΆΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ- ΠΡΠ»ΠΈ rebase Π΄ΠΎΠ»Π³ΠΈΠΉ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠΉ β
git rebase --abortΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉ merge git clean -fdxΠ½Π΅ΠΎΠ±ΡΠ°ΡΠΈΠΌ β ΡΠ΄Π°Π»ΡΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΠ΅Π· git