Π’ сущности, ΠΎΠ±Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½ΡƒΠΆΠ½Ρ‹ для слияния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ€Π°Π·Π½Ρ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ, Π½ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΎΠ½ΠΈ это Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами ΠΈ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ послСдствиями. Об этом ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½ΠΈΠΆΠ΅.

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΠ·Π²ΡƒΡ‡ΠΈΡ‚ΡŒ нСсколько ΠΏΡ€Π°Π²ΠΈΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π»ΠΈΡ†ΠΎ ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

  • Никогда Π½Π΅ ΠΏΡƒΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Ρ‡ΡƒΠΆΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ свою Π²Π΅Ρ‚ΠΊΡƒ ΠΈ Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Π½Π΅ΠΉ. Если Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π½Π°Π΄ этими измСнСниями Π² одиночСствС, Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΡƒΡˆΠΈΡ‚ΡŒ эту Π²Π΅Ρ‚ΠΊΡƒ сразу Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ (Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ этим Π½Π΅ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π°Ρ‚ΡŒ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ).

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ rebase Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²Π΅Ρ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ управляСтС Π»ΠΈΡ‡Π½ΠΎ. Rebase пСрСписываСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ мСняСт ΠΈΡ… Ρ…ΡΡˆΠΈ. Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с этой Π²Π΅Ρ‚ΠΊΠΎΠΉ, послС rebase Π΅ΠΌΡƒ придСтся Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌΠΈ ΠΈ синхронизациСй истории. Π’ΠΎ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ merge, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΌΠ° Π»ΠΈΡ†Π° ΠΈΠ»ΠΈ Ρ€ΡƒΠΊ ΠΎΡ‚ Π·Π°Π±ΠΎΡ‚Π»ΠΈΠ²Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅Π³.


git merge#

НаимСнСС дСструктивный способ Π²Π»ΠΈΡ‚ΡŒ измСнСния ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. НС измСняСт ΠΈ Π½Π΅ стираСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ сохраняСтся, Π½ΠΎ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΠΉ. Merge всСгда двигаСтся Π²ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ ΠΏΡ€ΠΎΡˆΠ»Ρ‹Π΅ измСнСния ΠΈ добавляСм ΠΊ Π½ΠΈΠΌ Π½ΠΎΠ²Ρ‹Π΅.

ΠœΡ‹ ΠΎΡ‚ΠΏΠΎΡ‡ΠΊΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΎΡ‚ master ΠΈ пишСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π² своСй Π²Π΅Ρ‚ΠΊΠ΅ feature. Π§Ρ‚ΠΎΠ±Ρ‹ пСрСнСсти Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, появившиСся Π² master, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ merge:

  1. Для этого ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π° своСй Π²Π΅Ρ‚ΠΊΠ΅ - git checkout feature
  2. ΠœΠ΅Ρ€ΠΆΠΈΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ· master Π² Π½Π°ΡˆΡƒ Ρ„ΠΈΡ‡Π°-Π²Π΅Ρ‚ΠΊΡƒ - git merge master
  3. ΠŸΠΎΡΠ²ΠΈΡ‚ΡΡ Π½ΠΎΠ²Ρ‹ΠΉ merge commit Π² нашСй feature Π²Π΅Ρ‚ΠΊΠ΅. Π­Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ git Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ с Π½ΠΎΠ²Ρ‹ΠΌ Ρ…ΡΡˆΠ΅ΠΌ Π² Π²Π°ΡˆΡƒ Ρ„ΠΈΡ‡Π°-Π²Π΅Ρ‚ΠΊΡƒ со всСми измСнСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ Π² master послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΎΡ‚ΠΏΠΎΡ‡ΠΊΠΎΠ²Π°Π»ΠΈ ΠΎΡ‚ Π½Π΅Π³ΠΎ свою Π²Π΅Ρ‚ΠΊΡƒ.
    master

    A---B---C

            \
    feature   D---E

git rebase#

ΠœΡ‹ "рСбСйсим" Ρ‚ΠΎ, ΠΎΡ‚ΠΊΡƒΠ΄Π° начинаСтся наша Π²Π΅Ρ‚ΠΊΠ°. Π­Ρ‚ΠΎ влияСт Π½Π° ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π”Π΅Π»Π°Π΅Ρ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π±ΠΎΠ»Π΅Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ.

interactive rebase#

Π’ ΠΊΠ°ΠΊΠΎΠΌ случаС я Π±Ρ‹ использовала git merge#

Π’ ΠΊΠ°ΠΊΠΎΠΌ случаС я Π±Ρ‹ использовала git rebase#