Π Π°Π·Π½ΠΎΠ΅

Merge git: Π·Π°Ρ‡Π΅ΠΌ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π·Π°Ρ‡Π΅ΠΌ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ / Π₯Π°Π±Ρ€

Часто Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ Merge (слияниС) ΠΈ Rebase (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅). Π’ Π“ΡƒΠ³Π»Π΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ€Π°Π·Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽΡ‚ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Rebase, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я объясню, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ слияниС ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ (ΠΈΠ»ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΈ ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Git Merge ΠΈ Git Rebase ΠΏΡ€Π΅ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ†Π΅Π»ΡŒ. Они ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Π₯отя конСчная Ρ†Π΅Π»ΡŒ одинаковая, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅.

НСкоторыС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Rebase, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Merge. Π’ этом Π΅ΡΡ‚ΡŒ свои ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы.

Git Merge

БлияниС β€” обычная ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… систСмы контроля вСрсий. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, созданы Π»ΠΈ Π²Π΅Ρ‚ΠΊΠΈ для тСстирования, исправлСния ошибок ΠΈΠ»ΠΈ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, слияниС фиксируСт измСнСния Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС. БлияниС ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ содСрТимоС Π²Π΅Ρ‚ΠΊΠΈ источника ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΈΡ… с Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ. Π’ этом процСссС измСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ цСлСвая Π²Π΅Ρ‚ΠΊΠ°. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ исходных Π²Π΅Ρ‚ΠΎΠΊ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠŸΠ»ΡŽΡΡ‹:

  • простота;
  • сохраняСт ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ хронологичСский порядок;
  • ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ контСкст Π²Π΅Ρ‚ΠΊΠΈ.

ΠœΠΈΠ½ΡƒΡΡ‹:

  • история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° (загрязнСна) мноТСством ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²;
  • ΠΎΡ‚Π»Π°Π΄ΠΊΠ° с использованиСм git bisect ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ слоТнСС.

Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ

Π‘Π»Π΅ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ master Π² Π²Π΅Ρ‚ΠΊΡƒ feature, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ checkout ΠΈ merge.

$ git checkout feature
$ git merge master
(or)
$ git merge master feature

Π­Ρ‚ΠΎ создаст Π½ΠΎΠ²Ρ‹ΠΉ Β«Merge commitΒ» Π² Π²Π΅Ρ‚ΠΊΠ΅ feature, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΎΠ±Π΅ΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ.

Git Rebase

Rebase β€” Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ пСрСнСсти измСнСния ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Rebase сТимаСт всС измСнСния Π² ΠΎΠ΄ΠΈΠ½ Β«ΠΏΠ°Ρ‚Ρ‡Β». Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ‚Ρ‡ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ слияния, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ пСрСзаписываСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Π’ процСссС устраняСтся Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ история.

ΠŸΠ»ΡŽΡΡ‹:

  • Π£ΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ
  • Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ манипуляций с СдинствСнным ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ
  • ИзбСТаниС слияния ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² занятых рСпозиториях ΠΈ Π²Π΅Ρ‚ΠΊΠ°Ρ…
  • ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, дСлая ΠΈΡ… ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для DevOps ΠΊΠΎΠΌΠ°Π½Π΄

ΠœΠΈΠ½ΡƒΡΡ‹:

  • Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Ρ„ΠΈΡ‡ Π΄ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ контСкст
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ опасным ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅
  • ΠŸΠΎΡΠ²Π»ΡΠ΅Ρ‚ΡΡ большС Ρ€Π°Π±ΠΎΡ‚Ρ‹
  • Для восстановлСния с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ трСбуСтся ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡˆ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ обновлСнию всСх Π²Π΅Ρ‚ΠΎΠΊ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя, ΠΊΠ°ΠΊ локально, Ρ‚Π°ΠΊ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ, ΠΈ это уТасно.

Если Π²Ρ‹ сдСлаСтС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, история измСнится, Π° это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, поэтому ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚Π΅!

Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ feature Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

$ git checkout feature
$ git rebase master

Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ всю Π²Π΅Ρ‚ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π³Π»Π°Π²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° измСняСтся, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² основной Π²Π΅Ρ‚ΠΊΠ΅.

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎ позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΏΡ€ΠΈ ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Π² Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Π­Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ автоматичСскоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ обСспСчиваСт ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ историСй ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для очистки истории Π΄ΠΎ слияния Π²Π΅Ρ‚ΠΊΠΈ feature Π² master.

$ git checkout feature
$ git rebase -i master

Π­Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, пСрСчислив всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Ρ‹.

pick 22d6d7c Commit message#1
pick 44e8a9b Commit message#2
pick 79f1d2h Commit message#3

Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ опрСдСляСт, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ° послС выполнСния пСрСмСщСния. Упорядочивая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ fixup, squash, edit, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Какой ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅? Π§Ρ‚ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ экспСрты?

Π’Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ СдинствСнно ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅. Всё зависит ΠΎΡ‚ потрСбностСй ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°ΠΉΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° основании ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Git. Для вас Π²Π°ΠΆΠ½Π° простота ΠΈΠ»ΠΈ пСрСзаписываниС истории, Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅?

Π§Ρ‚ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ я?

По ΠΌΠ΅Ρ€Π΅ роста ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ становится слоТно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ измСнСния Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, примСняя слияниС. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‡ΠΈΡΡ‚ΡƒΡŽ ΠΈ ΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Rebase.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Rebase:

  • Π’Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ локально: Ссли Π²Ρ‹ Π½Π΅ дСлились своСй Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с ΠΊΠ΅ΠΌ-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ слиянию, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ свою ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π² порядкС. Если Ρƒ вас Π΅ΡΡ‚ΡŒ личная Π²ΠΈΠ»ΠΊΠ° рСпозитория, которая Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ совмСстно с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ rebase Π΄Π°ΠΆΠ΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΠ»ΠΈΡΡŒ Π² свою Π²Π΅Ρ‚ΠΊΡƒ.
  • Π’Π°Ρˆ ΠΊΠΎΠ΄ Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ€Π΅Π²ΡŒΡŽ: Π²Ρ‹ создали ΠΏΡƒΠ»Π» рСквСст. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Π²Π°ΡˆΡƒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΡΡ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‚ Π΅Π΅ ΠΊ своСй Π²ΠΈΠ»ΠΊΠ΅ для локального Ρ€Π΅Π²ΡŒΡŽ. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ Β«ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒΒ» ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ запросы Π½Π° ΠΏΡƒΠ»Π» рСквСст ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠΌΠΊΡƒ истории.
  • РСвью сдСлано ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΎ ΠΊ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΠ΅ΠΌ! Π’Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ свою Π²Π΅Ρ‚ΠΊΡƒ feature. Учитывая, Ρ‡Ρ‚ΠΎ с этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ fetch-merging эти измСнСния, это ваш шанс ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. На этом этапС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΈ эти Π½Π°Π΄ΠΎΠ΅Π΄Π»ΠΈΠ²Ρ‹Π΅ Β«ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»ΠΊΠΈΒ» ΠΈ «слияниС» ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² нСбольшой Π½Π°Π±ΠΎΡ€ Ρ†Π΅Π»Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ явного слияния для этих ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Он записываСт, ΠΊΠΎΠ³Π΄Π° функция достигла master.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ Ρ…ΠΎΡ‚ΡŒ ΠΈ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ, Π½ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Merge ΠΈ Rebase. Π£Π²Π΅Ρ€Π΅Π½, Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π°ΠΌ.

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅:

code = coffee + developer

Команда Git Merge — SYSOUT

Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ история рСпозитория вСтвится. НапримСр, Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ трСбуСтся ΠΏΠΎΡ„ΠΈΠΊΡΠΈΡ‚ΡŒ Π±Π°Π³ –  ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ master.Β  Команда git merge ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ слуТит для слияния Π²Π΅Ρ‚ΠΎΠΊ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования

Допустим, Π΅ΡΡ‚ΡŒ основная Π²Π΅Ρ‚ΠΊΠ° master. И Π΅ΡΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ° hotfix, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ фиксим Π±Π°Π³. ΠœΡ‹ Π΅Π³ΠΎ пофиксили ΠΈ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ»ΠΈΡ‚ΡŒ измСнСния Π² Π²Π΅Ρ‚ΠΊΡƒ master. Для этого Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master – Ρ‚Ρƒ Π²Π΅Ρ‚ΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ измСнСния:

git checkout master

И Π·Π°Π»ΠΈΡ‚ΡŒ измСнСния ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ hotfix Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ master:

git merge hotfix

Π­Ρ‚ΠΎ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Но Π½Π΅ всСгда слияниС происходит Π³Π»Π°Π΄ΠΊΠΎ. Пока ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ hotfix, ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠ³ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„Π°ΠΉΠ» Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ мСстС, Ρ‡Ρ‚ΠΎ ΠΈ ΠΌΡ‹. Π’ΠΎΠ³Π΄Π° слияниС Π½Π΅ удаСтся, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚.

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ слияния

Допустим, Ρ„Π°ΠΉΠ» index.html ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π» ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ мСстС. Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ merge ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ сообщСниС:

$ git merge hotfix
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ? Если ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ index.html, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Git Π΅Π³ΠΎ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΠ» ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

<<<<<<< HEAD:index.html
<div>contact : [email protected]</div>
=======
<div>
  please contact us at [email protected]
</div>
>>>>>>> hotfix:index.html

Надо ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ спорной строки. ПослС этого Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² индСкс:

git add index.html

И ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ снимок:

git commit

На этом всС, ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½.

Если ΠΆΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ΠΊΠΎΠ³Π΄Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ слияниС merge (Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·):

git merge abort

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ сцСнарии git merge

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ –no-commit

Π‘Ρ‹Π²Π°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° история снимков (ряд ΠΊΠΎΠΌΠ°Π½Π΄ commit) Π² Π²Π΅Ρ‚ΠΊΠ΅ Π±Ρ‹Π»Π° сдСлана Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ осмыслСнно, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ Π΄Π΅Π»Π°Π»ΠΈ снимки состояний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ стоит ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² истории Π½Π° всСобщСм ΠΎΠ±ΠΎΠ·Ρ€Π΅Π½ΠΈΠΈ. Π—Π΄Π΅ΡΡŒ Ρ‚ΠΎ ΠΈ пригодится ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ –no-commit. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСчасто – Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли хочСтся ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ снимков Π²Π΅Ρ‚ΠΊΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎΠ± Π½ΠΈΠΊΡ‚ΠΎ ΠΈΡ… Π½ΠΈΠΊΡ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡƒΠ²ΠΈΠ΄Π΅Π» ΠΈ ΠΊ Π½ΠΈΠΌ нСльзя Π±Ρ‹Π»ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ.

Но сначала вСрнСмся ΠΊ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ ΠΈ рассмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ merge Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

git checkout master
git merge hotfix

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° (checkout) ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Ρ‚ нас Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ наша ΠΏΠ°ΠΏΠΊΠ° Π½Π° дискС физичСски заполнятся вСрсиями Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ master

А команда merge:

  • пСрСнСсСт Π² master всС измСнСния Π²Π΅Ρ‚ΠΊΠΈΒ hotfix. Π’ΠΎ Π΅ΡΡ‚ΡŒ содСрТимоС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠ°ΠΏΠΊΠΈ измСнится с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π·Π°Π»ΠΈΡ‚Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
  • ΠΈ сдСлаСт commit (Ссли Π½Π΅Ρ‚ Π½Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ²). Π’ΠΎ Π΅ΡΡ‚ΡŒ сдСлаСт снимок ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ состояния ΠΈ занСсСт Π΅Π³ΠΎΒ  Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. ΠŸΡ€ΠΈ этом история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π²Π΅Ρ‚ΠΊΠΈ hotfix Π±ΡƒΠ΄Π΅Ρ‚ сохранСна ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° merge с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ – ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°Π΄ΠΎ Π·Π°Π»ΠΈΡ‚ΡŒ измСнСния:

git checkout master

Но Π² этот Ρ€Π°Π· допустим, Ρ‡Ρ‚ΠΎ снимки Π² Π²Π΅Ρ‚ΠΊΠ΅ hotfixΒ  Π±Ρ‹Π»ΠΈ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ± ΠΈΡ… Π½Π΅ Π±Ρ‹Π»ΠΎ Π² истории. Π’ этом случаС Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ –no-commit:

git merge --no-commit hotfix

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ –  пСрСнСсСт Π² Π½ΠΈΡ… всС измСнСния Π²Π΅Ρ‚ΠΊΠΈ hotfix, Π½ΠΎ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ снимка сдСлано Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. ΠœΡ‹ смоТСм Π΅Ρ‰Π΅ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ commit ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. ΠŸΡ€ΠΈ этом Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ снимок. Π‘ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‚ΠΊΠ° hotfix слита с Π²Π΅Ρ‚ΠΊΠΎΠΉ master, ΠΈ всС. А снимки Π²Π΅Ρ‚ΠΊΠΈ hotfix Π²ΠΈΠ΄Π½Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ –squash

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° такая ΠΆΠ΅, ΠΊΠ°ΠΊ прСдыдущая, Ρ€Π°Π·Π½ΠΈΡ†Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ просмотрС истории. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°Π»ΠΈΡ‚ΡŒ измСнСния:

git checkout master

ПослС выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

git merge --squash hotfix

измСнСния  появятся Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΏΠ°ΠΏΠΊΠ°Ρ… Π²Π΅Ρ‚ΠΊΠΈ master, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ послС выполнСния ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ с аргумСнтом –no-commit. ΠŸΡ€ΠΈ этом Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ снимка (commit) Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚.

Но Π·Π°Ρ‚Π΅ΠΌ послС ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ commit ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π² истории этот снимок ΠΊΠ°ΠΊ самый ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ снимок Π² Π²Π΅Ρ‚ΠΊΠ΅ master. Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‚ΠΊΠ° hotfix сливалась Π² Π²Π΅Ρ‚ΠΊΡƒ master, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ Π² истории Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ –no-ff

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ –no-ff Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΡƒ.

ff ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ fast forward, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠ°.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ… объясню, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠ°. Она случаСтся ΠΏΡ€ΠΈ слиянии, Ссли Π² Ρ‚ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΎΡ‚Π²Π΅Ρ‚Π²ΠΈΠ»ΠΈΡΡŒ, Π½Π΅ Π±Ρ‹Π»ΠΎ снимков послС нашСго отвСтвлСния. НазываСтся это ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΎΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ тСхничСски Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ снимка Π² этом случаС Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Π½Π°Π΄ΠΎ, выполняя слияниС Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄ΠΊΠΎΠ². Наш снимок считаСтся послСдним, ΠΈ Π½Π° Π½Π΅Π³ΠΎ просто пСрСматываСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

На ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ ΠΌΡ‹ ΠΎΡ‚Π²Π΅Ρ‚Π²ΠΈΠ»ΠΈΡΡŒ ΠΎΡ‚ Π‘ ΠΈ сдСлали снимки X ΠΈ Y. ПослС снимка C Π² Π²Π΅Ρ‚ΠΊΠ΅ master Π½ΠΈΠΊΡ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π», ΠΈ ΠΏΡ€ΠΈ слиянии ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ просто пСрСмСстится Π½Π° снимок Y:

master: A - B - C
                 \
hotfix:           X - Y

Π•Ρ‰Π΅ Ρ€Π°Π· ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Π²Π΅Ρ‚ΠΊΠ΅ master послС отвСтвлСния ΠΎΡ‚ Π‘ снимков Π½Π΅ появилось, ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠ° ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° –no-ff ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΡƒ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ слиянии Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ снимок, Ρ…ΠΎΡ‚ΡŒ Π² Π½Π΅ΠΌ ΠΈ Π½Π΅Ρ‚ тСхничСской нСобходимости. Π‘Π΄Π΅Π»Π°Π΅ΠΌ это:

git merge --no-ff hotfix

На ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ это выглядит Ρ‚Π°ΠΊ:

master: A - B - C   -  (M)
                 \     /
hotfix:           X - Y

Π‘ΡƒΠ΄Π΅Ρ‚ создан Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ снимок M ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ пСрСмСстится Π½Π° Π½Π΅Π³ΠΎ (хотя ΠΌΠΎΠ³ Π±Ρ‹ просто ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π½Π° Y, Ссли Π± выполняли слияниС Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° –no-ff).

Когда ΠΈΠΌΠ΅Π½Π½ΠΎ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ –no-ff ΡΠΊΠ°Π·Π°Ρ‚ΡŒ слоТно – отчасти это вопрос вкуса. НСкоторыС Π»ΡŽΠ±ΡΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ снимок ΠΏΡ€ΠΈ любом Π²Π°ΠΆΠ½ΠΎΠΌ слиянии.

Блияния ΠΈΠ»ΠΈ ΠΌΠ΅Ρ€Π΄ΠΆΠΈ Π²Π΅Ρ‚ΠΎΠΊ. Π£Ρ€ΠΎΠΊ 9

Π£Ρ€ΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ научимся ΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ собой

Π’ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ

ΠšΠΎΠ½ΡΠΏΠ΅ΠΊΡ‚ ΡƒΡ€ΠΎΠΊΠ°


ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ содСрТаниС ΡƒΡ€ΠΎΠΊΠ°, основныС инструкции для ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки ΠΈ совСты.

Π’Π΅Ρ‚ΠΊΠ° master — Π΅Ρ‰Π΅ Ρ€Π°Π·


ΠœΠ°ΡΡ‚Π΅Ρ€ — это основная Π²Π΅Ρ‚ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ заливаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Новый Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² оказываСтся Π² мастСрС.
Π’ этой Π²Π΅Ρ‚ΠΊΠ΅ находится Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΈ Π½Π° Π±ΠΎΠ΅Π²ΠΎΠΌ сайтС


Π’ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… компаниях ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ приняты Π΄Ρ€ΡƒΠ³ΠΈΠ΅ соглашСния насчСт Π²Π΅Ρ‚ΠΎΠΊ. НапримСр, Ρ‡Ρ‚ΠΎ вСсь Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» сначала сливаСтся Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.
Но Π² Π½Π°ΡˆΠΈΡ… ΡƒΡ€ΠΎΠΊΠ°Ρ… ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‚ΠΊΠ° мастСр — главная ΠΈ Π² Π½Π΅Π΅ Π² ΠΈΡ‚ΠΎΠ³Π΅ Π·Π°Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ


ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… ΡΠΎΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡΡ… ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части курса.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ΅Ρ€Π΄ΠΆ ΠΈΠ»ΠΈ слияниС Π²Π΅Ρ‚ΠΎΠΊ


Π­Ρ‚ΠΎ пСрСнос ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ.
НапримСр, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ Π²Π΅Ρ‚ΠΊΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сдСлали Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠ»ΠΈ Π±Π°Π³Ρƒ, ΠΌΡ‹ сливаСм Π΅Π΅ Π² мастСр.
Π’ мастСрС ΠΊΠΎΠ΄ провСряСтся Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΈ выкладываСтся Π½Π° Π±ΠΎΠ΅Π²ΠΎΠΉ сСрвСр.


Π‘Π»ΠΈΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π° ΠΌΠΎΠΆΠ½ΠΎ Π»ΡŽΠ±Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ. ВСхничСски, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния git Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹, сливаСтся Π²Π΅Ρ‚ΠΊΠ° с Π½ΠΎΠ²Ρ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ Π² мастСр ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.
Для нас мастСр — это основная Π²Π΅Ρ‚ΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π° для git это просто Π²Π΅Ρ‚ΠΊΠ°.


Π Π°Π·Π½ΠΈΡ†Π° логичСская


ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ новая Π²Π΅Ρ‚ΠΊΠ° сливаСтся Π² мастСр, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ ΠΈ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° Π±ΠΎΠ΅Π²ΠΎΠΉ сайт.
Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ сливаСм Π²Π΅Ρ‚ΠΊΡƒ Π² мастСр ΠΈ Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌ мастСр Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½.


ΠœΠ°ΡΡ‚Π΅Ρ€ сливаСтся Π² Π²Π΅Ρ‚ΠΊΡƒ ΠΈΠ»ΠΈ мастСр подтягиваСтся Π² Π²Π΅Ρ‚ΠΊΡƒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Π²Π΅Ρ‚ΠΊΠΎΠΉ, Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΠΌ пСриодичСски ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ с сСрвСра — Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ написали наши ΠΊΠΎΠ»Π»Π΅Π³ΠΈ.
Если Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ Π²Π΅Ρ‚ΠΊΠΎΠΉ ΠΈΠ΄Π΅Ρ‚ довольно Π΄ΠΎΠ»Π³ΠΎ, Π΅ΡΡ‚ΡŒ смысл ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ измСнСния ΠΈΠ· мастСра Ρ…ΠΎΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь.


Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΌΠ΅Ρ€Π΄ΠΆ своСй Π²Π΅Ρ‚ΠΊΠΈ Π² мастСр ΠΈ ΠΌΠ΅Ρ€Π΄ΠΆ мастСра Π² свою Π²Π΅Ρ‚ΠΊΡƒ.

ΠœΠ΅Ρ€Π΄ΠΆ Π²Π΅Ρ‚ΠΊΠΈ Π² мастСр


ВыполняСтся послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ своСй Π²Π΅Ρ‚ΠΊΠΎΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git merge. Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ Π² мастСр, Π½ΡƒΠΆΠ½ΠΎ сначала ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² мастСр, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git merge branch_name.


    $ git checkout master
    $ git merge news

ΠŸΡ€ΠΈ этом Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅ ситуации


ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Π½ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Пока ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π°Π΄ Π²Π΅Ρ‚ΠΊΠΎΠΉ, Π² мастСрС Π½Π΅ появилось Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²


Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ создали Π²Π΅Ρ‚ΠΊΡƒ, ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π°Π΄ Π½Π΅ΠΉ, ΡΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π·Π°Π»ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² мастСр, Π° Π·Π° это врСмя Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρ‚Π°ΠΌ Π½Π΅ появилось. Π’ΠΎΠ³Π΄Π° слияниС ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‚Π°ΠΊ


    $ git merge news
    Updating f32b91e..33ea897
    Fast-forward
     index.html | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)
     
    $ git push origin master
    $ git branch -d news


Git ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ просто ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Ρ€Ρ… старого. Π­Ρ‚ΠΎ простая ситуация ΠΈ git Π½Π΅ Π·Π°Π΄Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… вопросов.


НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ сразу Π·Π°ΠΏΡƒΡˆΠΈΡ‚ΡŒ измСнСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ, ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ header, Ссли ΠΎΠ½Π° большС Π½Π΅ Π½ΡƒΠΆΠ½Π°.


Π’Π΅ΠΏΠ΅Ρ€ΡŒ другая ситуация.

Пока ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π°Π΄ Π²Π΅Ρ‚ΠΊΠΎΠΉ, Π² мастСрС появились ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΎΡ‚ ΠΊΠΎΠ»Π»Π΅Π³


Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° мастСр


    $ git checkout master 
    Switched to branch 'master'
    Your branch is up-to-date with 'origin/master'.


ΠŸΠΎΡ‡Π΅ΠΌΡƒ «is up-to-date»? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΅Ρ‰Π΅ Π½Π΅ сдСлали git pull. Π”Π΅Π»Π°Π΅ΠΌ


    $ git pull --rebase origin master 


ΠœΠ΅Ρ€Π΄ΠΆΠΈΠΌ свою Π²Π΅Ρ‚ΠΊΡƒ Π² мастСр


    $ git merge news-styles 


И Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ Π·Π°ΠΏΡƒΡˆΠΈΡ‚ΡŒ измСнСния


    $ git push origin master 

Π§Ρ‚ΠΎ Ссли сначала Π½Π΅ ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ мастСр, Π° ΡΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒ свою Π²Π΅Ρ‚ΠΊΡƒ


ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ измСнится, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ сначала ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΡƒ мастСр, Π° ΡƒΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°Π»ΠΈΠ²Π°Ρ‚ΡŒ свои измСнСния. А Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ свою Π²Π΅Ρ‚ΠΊΡƒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мастСра.
Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ стоит ΠΏΠΎΡ‡Π°Ρ‰Π΅ ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ мастСр Π² свою Π²Π΅Ρ‚ΠΊΡƒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ Π² своСй Π²Π΅Ρ‚ΠΊΠ΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Ρƒ нас мСньшС риска Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠ»ΠΎΠΌΠ°Ρ‚ΡŒ.
А Ссли ΠΏΠΎΠ»ΠΎΠΌΠ°Π΅ΠΌ, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Ρ‡ΠΈΠ½ΠΈΡ‚ΡŒ это Π² своСй Π²Π΅Ρ‚ΠΊΠ΅, Π° Π½Π΅ Π² мастСрС.

Как Π²ΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒ мастСр Π² свою Π²Π΅Ρ‚ΠΊΡƒ


Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΠ΄Π΅ΠΌ Π² мастСр, подтягиваСм измСнСния с сСрвСра, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π΅Π»Π°Π΅ΠΌ git pull. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π² свою Π²Π΅Ρ‚ΠΊΡƒ ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ git merge master


    $ git checkout master
    $ git pull --rebase origin master
    $ git checkout news-redesign
    $ git merge master


Π—Π°Ρ‚Π΅ΠΌ провСряСм, Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ поломалось ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ΠœΠ΅Ρ€Π΄ΠΆ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹


Π§Π΅ΠΌ Ρ‡Π°Ρ‰Π΅ ΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π²Π΅Ρ‚ΠΊΠΈ, Ρ‚Π΅ΠΌ большС появляСтся Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ€Π΄ΠΆ-ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ появляСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ подтягиваСм мастСр Π² свою Π²Π΅Ρ‚ΠΊΡƒ ΠΈΠ»ΠΈ сливаСм свою Π²Π΅Ρ‚ΠΊΡƒ Π² мастСр.
Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π½Π΅ хранят ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΎΠ½ΠΈ хранят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΊΡ‚ ΠΌΠ΅Ρ€Π΄ΠΆΠ° ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ.


ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ список ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ Π½Π°ΠΉΠ΄Π΅ΠΌ ΠΌΠ΅Ρ€Π΄ΠΆ-ΠΊΠΎΠΌΠΌΠΈΡ‚ с Ρ…ΡΡˆΠ΅ΠΌ 051f754


    $ git log --oneline 
    051f754 Merge branch 'news'
    ...


ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π΅Π³ΠΎ содСрТимоС


    $ git show 051f754
    
    commit 051f75475cb1dca3cd08c1c7367a3308671ccf7b
    Merge: 0a3a6a3 2346be5
    Author: Alexandr Shestakov 
    Date:   Sat Feb 8 14:10:39 2020 +0300
    
        Merge branch 'news'


Π’ΠΎ Π΅ΡΡ‚ΡŒ информация Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² мастСр Π±Ρ‹Π»Π° Π·Π°Π»ΠΈΡ‚Π° Π²Π΅Ρ‚ΠΊΠ° news. Π‘Π°ΠΌΠΈ измСнСния Π² Ρ„Π°ΠΉΠ»Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ Π² Π²Π΅Ρ‚ΠΊΠ΅ news, Π»Π΅ΠΆΠ°Ρ‚ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ….


Π‘ΠΏΠΎΡ€Ρ‹ ΠΎ Ρ‚ΠΎΠΌ, Π΅ΡΡ‚ΡŒ польза ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², вСдутся Π³ΠΎΠ΄Π°ΠΌΠΈ ΠΈ Π½Π΅ закончатся, Π²ΠΈΠ΄ΠΈΠΌΠΎ, Π½ΠΈΠΊΠΎΠ³Π΄Π°.


Плюс Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€Π° — git позволяСт ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π±Π΅Π· Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π²ΠΎΠΎΠ±Ρ‰Π΅.
Π’ΠΎΠ³Π΄Π° история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ измСнСния Π² ΠΊΠΎΠ΄Π΅, Π° Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ. Π­Ρ‚ΠΎ достигаСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Ρ€Π΅Π±Π΅ΠΉΠ·Π°, Π½ΠΎ это Ρ‚Π΅ΠΌΠ°, которая Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ курса.
Π Π΅Π±Π΅ΠΉΠ·, Π΅Π³ΠΎ ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы, ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части курса.


Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ мою ΡΡ‚Π°Ρ€ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ — ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ ΠΌΠ΅Ρ€Π΄ΠΆΠ° ΠΎΡ‚ Ρ€Π΅Π±Π΅ΠΉΠ·Π°.


Π’ Π½Π΅ΠΉ Π½Π΅Ρ‚ Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠ°, Π½ΠΎ наглядно ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π°Ρ….

ΠœΠ΅Ρ€Π΄ΠΆΠΈ всСгда проходят Ρ‚Π°ΠΊ Π³Π»Π°Π΄ΠΊΠΎ?


К соТалСнию, Π½Π΅Ρ‚


Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π»ΠΈ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ ΠΈ рассматривали случаи, ΠΊΠΎΠ³Π΄Π° наши ΠΊΠΎΠ»Π»Π΅Π³ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ измСнСния Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… участках ΠΊΠΎΠ΄Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ с Π½ΠΈΠΌΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°Π»ΠΈΡΡŒ.
Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Ρ‚Π°ΠΊ происходит Π½Π΅ всСгда. Иногда ΠΌΡ‹ ΠΏΡ€Π°Π²ΠΈΠΌ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ участки ΠΊΠΎΠ΄Π° ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ ΠΈΡ… слиянии git Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Π΅ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ. Π­Ρ‚ΠΎ называСтся возникновСния ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°.


ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°Ρ… ΠΈ ΠΈΡ… Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅.

Π§Ρ‚ΠΎ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΡΠΎΠ²Π΅Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ

  • НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ мастСр — это ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½, это рабочая вСрсия ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ стоит Π»ΠΎΠΌΠ°Ρ‚ΡŒ
  • Π’ мастСр Π½Π΅ сливаСтся нСзакончСнная Ρ€Π°Π±ΠΎΡ‚Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»
  • ΠŸΠ΅Ρ€Π΅Π΄ ΠΌΠ΅Ρ€Π΄ΠΆΠ΅ΠΌ своСй Π²Π΅Ρ‚ΠΊΠΈ Π² мастСр, подтягивайтС измСнСния Π² мастСр с сСрвСра
  • ПослС ΠΌΠ΅Ρ€Π΄ΠΆΠ° Π² мастСр, Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΏΡƒΡˆΠΈΡ‚ΡŒ эти измСнСния
  • ΠŸΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΠΉΡ‚Π΅ мастСр Π² свою Π²Π΅Ρ‚ΠΊΡƒ ΠΏΠΎΡ‡Π°Ρ‰Π΅
  • ΠœΠ΅Ρ€Π΄ΠΆ-ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ нСсут ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Ρ„Π°ΠΊΡ‚Π΅ слияния Π²Π΅Ρ‚ΠΎΠΊ. Π”ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ΡΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅, насколько ΠΎΠ½ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹
  • ΠŸΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Ρ€Π΅Π±Π΅ΠΉΠ·Π°, ΠΎΠ½ позволяСт вСсти Ρ‡ΠΈΡΡ‚ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π±Π΅Π· ΠΌΠ΅Ρ€Π΄ΠΆ-ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²


Бпасибо Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Π΄ΠΎ встрСчи!

ВсС ΡƒΡ€ΠΎΠΊΠΈ курса

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ слСдуСт…

ΠΏΡ€ΠΈΠΌΠ΅Ρ€ merge develop Π² master

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒ Π±Ρ€Π°Π½Ρ‡ ΠΈΠ· Π΄Π΅Π²Π΅Π»ΠΎΠΏ-Π²Π΅Ρ‚ΠΊΠΈ Π² мастСр, с сохранСниСм всСх ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ истории.

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° мастСр, потягиваСм послСдниС измСнСния:

$ git checkout master
$ git pull
Already up to date.

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° Π±Ρ€Π°Π½Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ ΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒ Π² master, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это LTHS-380_Update_build_deploy_to_compose:

gitΒ checkoutΒ LTHS-380_Update_build_deploy_to_compose

MΒ Β Β Β Β Β Β scripts/api_start.sh

MΒ Β Β Β Β Β Β terraform/terraform-cn.sh

SwitchedΒ toΒ branchΒ ‘LTHS-380_Update_build_deploy_to_compose’

YourΒ branchΒ isΒ upΒ toΒ dateΒ withΒ ‘origin/LTHS-380_Update_build_deploy_to_compose’.

M послС Ρ‡Π΅ΠΊΠ°ΡƒΡ‚Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π±Ρ‹Π» modified:

  • M = modified
  • A = added
  • D = deleted
  • R = renamed
  • C = copied
  • U = updated but unmerged

Но Ρ‚ΡƒΡ‚ эти измСнСния Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π΅ Π½Π°Π΄ΠΎ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ.

ΠŸΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Π΅ΠΌ послСдниС измСнСния Π² Π΄Π΅Π²Π΅Π»ΠΎΠΏ-Π±Ρ€Π°Π½Ρ‡Π΅:

gitΒ pull

AlreadyΒ upΒ toΒ date.

Π’ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚.

ΠœΠ΅Ρ€ΠΆΠΈΠΌ измСнСния ΠΈΠ· мастСра Π² Π΄Π΅Π²Π΅Π»ΠΎΠΏ Π±Ρ€Π°Π½Ρ‡, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС измСнСния ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, Ссли Π±ΡƒΠ΄ΡƒΡ‚, Π² Π΄Π΅Π²Π΅Π»ΠΎΠΏ-Π±Ρ€Π°Π½Ρ‡Π΅:

gitΒ mergeΒ master

AlreadyΒ upΒ toΒ date.

Π’ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² мастСрС Π½Π΅ Π±Ρ‹Π»ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ up to date, ΠΈΠ΄Ρ‘ΠΌ дальшС.

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° мастСр:

ΠœΠ΅Ρ€Π΄ΠΆΠΈΠΌ Π² Π½Π΅Π³ΠΎ измСнСния ΠΈΠ· Π΄Π΅Π²Π΅Π»ΠΎΠΏ-Π²Π΅Ρ‚ΠΊΠΈ:

gitΒ mergeΒ -mΒ «composeΒ migrationΒ complete»Β —no-ffΒ LTHS-380_Update_build_deploy_to_compose

RemovingΒ terraform/files/userdata/eureka.sh

RemovingΒ terraform/eureka.tf

RemovingΒ packer/eureka/template.json

RemovingΒ packer/eureka/app.sh

MergeΒ madeΒ byΒ theΒ ‘recursive’Β strategy.

packer/api/app.shΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |Β Β 1Β +

packer/api/docker-compose.ymlΒ Β Β Β Β Β Β |Β 64Β ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

packer/api/template.jsonΒ Β Β Β Β Β Β Β Β Β Β Β |Β Β 8Β +++++++-

packer/eureka/app.shΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |Β 11Β ————

packer/eureka/template.jsonΒ Β Β Β Β Β Β Β Β |Β 35Β ————————————

terraform/api.tfΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |Β 35Β ————————————

terraform/eureka.tfΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |Β 91Β ——————————————————————————————-

terraform/files/userdata/api.shΒ Β Β Β Β |Β 37Β ++++———————————

terraform/files/userdata/eureka.shΒ Β |Β Β 8Β ———

terraform/security_group_api_elb.tfΒ |Β 74Β +————————————————————————-

terraform/variables.tfΒ Β Β Β Β Β Β Β Β Β Β Β Β Β |Β Β 3Β +++

11Β filesΒ changed,Β 80Β insertions(+),Β 287Β deletions(-)

createΒ modeΒ 100644Β packer/api/docker-compose.yml

deleteΒ modeΒ 100644Β packer/eureka/app.sh

deleteΒ modeΒ 100644Β packer/eureka/template.json

deleteΒ modeΒ 100644Β terraform/eureka.tf

deleteΒ modeΒ 100644Β terraform/files/userdata/eureka.sh

ΠžΠΏΡ†ΠΈΡ --no-ff, ΠΈΠ»ΠΈ no fast-forward описана Π² постС Git: merge – Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Π° опция –no-ff, no-fast-forward.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π·Π°ΠΏΡƒΡˆΠΈΡ‚ΡŒ измСнСния Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:

gitΒ push

CountingΒ objects:Β 1,Β done.

WritingΒ objects:Β 100%Β (1/1),Β 228Β bytesΒ |Β 228.00Β KiB/s,Β done.

TotalΒ 1Β (deltaΒ 0),Β reusedΒ 0Β (deltaΒ 0)

ToΒ ssh://bitbucket.domain.tld:7999/server-api-infrastructure.git

391c558..1e23693Β Β masterΒ ->Β master

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ собСрём всё вмСстС:

  1. git checkout master // ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° мастСр, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ΅Ρ€Π΄ΠΆ
  2. git pull // подягиваСм послСдниС измСнСния
  3. git checkout develop // ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° Π±Ρ€Π°Π½Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ ΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒ Π² мастСр
  4. git pull // подтягиваСм послСдниС измСнСния
  5. git merge master // ΠΌΠ΅Ρ€Π΄ΠΆΠΈΠΌ мастСр Π² Π΄Π΅Π²Π΅Π»ΠΎΠΏ-Π±Ρ€Π°Π½Ρ‡, Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ»ΠΈΠΊΡ‚Ρ‹, Ссли Π΅ΡΡ‚ΡŒ, Π² Π΄Π΅Π²Π΅Π»ΠΎΠΏ Π±Ρ€Π°Π½Ρ‡Π΅
  6. git checkout master // ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° мастСр
  7. git merge -m "merge message" develop // ΠΌΠ΅Ρ€Π΄ΠΆΠΈΠΌ измСнСния ΠΈΠ· Π΄Π΅Π²Π΅Π»ΠΎΠΏΠ° Π² мастСр, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ --no-ff
  8. git push // ΠΏΡƒΡˆΠΈΠΌ мастСр Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ

Если Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ создавался Π±Ρ€Π°Π½Ρ‡, Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π° β€” Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ git Ρ‚Π΅Π³ ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π±Ρ€Π°Π½Ρ‡.

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС процСсс Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

  1. git checkout master // ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° мастСр, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ΅Ρ€Π΄ΠΆ
  2. git pull // подягиваСм послСдниС измСнСния
  3. git checkout develop // ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° Π±Ρ€Π°Π½Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ ΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒ Π² мастСр
  4. git pull // подтягиваСм послСдниС измСнСния
  5. git merge master // ΠΌΠ΅Ρ€Π΄ΠΆΠΈΠΌ мастСр Π² Π΄Π΅Π²Π΅Π»ΠΎΠΏ-Π±Ρ€Π°Π½Ρ‡, Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ»ΠΈΠΊΡ‚Ρ‹, Ссли Π΅ΡΡ‚ΡŒ, Π² Π΄Π΅Π²Π΅Π»ΠΎΠΏ Π±Ρ€Π°Π½Ρ‡Π΅
  6. git checkout master // ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° мастСр
  7. git merge -m "merge message" develop // ΠΌΠ΅Ρ€Π΄ΠΆΠΈΠΌ измСнСния ΠΈΠ· Π΄Π΅Π²Π΅Π»ΠΎΠΏΠ° Π² мастСр, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ --no-ff
  8. git tag -a v0.1 -m "tag message" // добавляСм Ρ‚Π΅Π³ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС рСпозитория
  9. git push origin v0.1 // ΠΏΡƒΡˆΠΈΠΌ Ρ‚Π΅Π³
  10. git branch -d develop // удаляСм develop Π±Ρ€Π°Π½Ρ‡, ΠΏΡ€ΠΈ нСобходимости β€” восстанавливаСм ΠΈΠ· Ρ‚Π΅Π³ΠΎΠ² β€” git checkout -b develop v1.0
  11. git push // ΠΏΡƒΡˆΠΈΠΌ мастСр Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ

Π“ΠΎΡ‚ΠΎΠ²ΠΎ.

Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ git. merge vs rebase для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

август
21
, 2016

ΠŸΡ€ΠΎ git merge ΠΈ git rebase написаны тысячи статСй. Π—Π°Ρ‡Π΅ΠΌ ΠΆΠ΅ Π½ΡƒΠΆΠ½Π° Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π°?


Π Π°Π·Π±ΠΈΡ€Π°ΡΡΡŒ Π² своС врСмя с git rebase, я Π½Π΅ нашСл Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ этот инструмСнт с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π³ΠΈΡ‚ΠΎΠΌ. Π― Π²ΠΈΠ΄Π΅Π» мноТСство схСм Ρ€Π΅Π±Π΅ΠΉΠ·Π°, Π½ΠΎ Ρ‚Π°ΠΊ ΠΈ Π½Π΅ ΠΌΠΎΠ³ ΠΏΠΎΠ½ΡΡ‚ΡŒ, для Ρ‡Π΅Π³ΠΎ ΠΆΠ΅ всС-Ρ‚Π°ΠΊΠΈ Π½ΡƒΠΆΠ΅Π½ rebase, Ρ‡Π΅ΠΌ ΠΎΠ½ Ρ‚Π°ΠΊ отличаСтся ΠΎΡ‚ merge. Когда стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ rebase ΠΈ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ (ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ), Ссли Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ.


Π― Π½Π΅ люблю абстрактныС схСмы. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎΠΊΠ°ΠΆΡƒ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· повсСднСвной ΠΆΠΈΠ·Π½ΠΈ Π΄Π²ΡƒΡ… ΠΊΠΎΠ»Π»Π΅Π³-программистов. Наглядно, с ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°ΠΌΠΈ ΠΈ подробностями, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ merge ΠΈ rebase. Для Π΄Π°Π²Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с Π³ΠΈΡ‚ΠΎΠΌ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ. Π’Π΅ΠΌ ΠΆΠ΅, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с rebase, надСюсь, ΡΡ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ.


ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ: Π΄Π²ΠΎΠ΅ ΠΊΠΎΠ»Π»Π΅Π³, Π½Π°Π·ΠΎΠ²Π΅ΠΌ ΠΈΡ… Вася ΠΈ ΠŸΠ΅Ρ‚Ρ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°Π΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.
ΠŸΡƒΡΡ‚ΡŒ это Π±ΡƒΠ΄Π΅Ρ‚ простой сайт.
Π€Π°ΠΉΠ» index.html с Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ ΠΈΠ· мСню, содСрТимого ΠΈ ΠΏΠΎΠ΄Π²Π°Π»Π°.
И стили для страницы style.css.
Вася создаСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈ дальшС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ ΠΏΠΎΠ΄Π²Π°Π»ΠΎΠΌ сайта.
ΠŸΠ΅Ρ‚Ρ занимаСтся Π²Π΅Ρ€Ρ…Π½ΠΈΠΌ мСню ΠΈ содСрТимым Π³Π»Π°Π²Π½ΠΎΠΉ страницы — ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ.


Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π΅ΡΡ‚ΡŒ основная Π²Π΅Ρ‚ΠΊΠ° master, Π² Π½Π΅Π΅ пСриодичСски коммитят ΠΈ Вася, ΠΈ ΠŸΠ΅Ρ‚Ρ.
Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ стилями ΠΏΠΎΠ΄Π²Π°Π»Π° Вася создаСт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ new-footer, дСлая свои ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Π½Π΅Π΅ ΠΈ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ подтягивая Π² эту Π²Π΅Ρ‚ΠΊΡƒ мастСр.
ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ new-footer Вася ΡΠΎΠ»ΡŒΠ΅Ρ‚ Π΅Π΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.


Π’ ΠΏΠ»Π°Π½Π΅ слияния Π²Π΅Ρ‚ΠΎΠΊ git merge отличаСтся ΠΎΡ‚ git rebase Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ выглядит история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², насколько ΠΎΠ½Π° красива ΠΈ понятна.
И сСйчас ΠΌΡ‹ посмотрим поэтапно, ΠΊΠ°ΠΊ происходит Ρ€Π°Π±ΠΎΡ‚Π° Π² случаС merge ΠΈ rebase ΠΈ ΠΊΠ°ΠΊ выглядит история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ Π²Π΅Ρ‚ΠΎΠΊ.


НачинаСт ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Вася, ΠΎΠ½ создаСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈ ΠΏΡƒΡˆΠΈΡ‚ Π΅Π³ΠΎ.
Π”Π°Π»ΡŒΡˆΠ΅ начинаСтся ΡƒΠΆΠ΅ совмСстная Ρ€Π°Π±ΠΎΡ‚Π° с ΠŸΠ΅Ρ‚Π΅ΠΉ.
Пока наша Π²Π΅Ρ‚ΠΊΠ° выглядит Ρ‚Π°ΠΊ (ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹ взяты ΠΈΠ· phpStorm, инструмСнта git log)


Π”Π°Π»ΡŒΡˆΠ΅ Вася добавляСт ΠΏΠΎΠ΄Π²Π°Π» прямым ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ Π² мастСр.


Вася Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ΄Π²Π°Π»ΠΎΠΌ со своим ΠΊΠΎΠ»Π»Π΅Π³ΠΎΠΉ ΠŸΠ΅Ρ‚Π΅ΠΉ ΠΈ пытаСтся Π·Π°ΠΏΡƒΡˆΠΈΡ‚ΡŒ мастСр.
Но ΠŸΠ΅Ρ‚Ρ ΡƒΠΆΠ΅ успСл Π·Π°ΠΏΡƒΡˆΠΈΡ‚ΡŒ со своСй стороны Π² мастСр ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠΉΡΡ мСню.
Как извСстно, git Π½Π΅ даст Π·Π°ΠΏΡƒΡˆΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Вася Π½Π΅ подтянСт свСТий ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΎΡ‚ ΠŸΠ΅Ρ‚ΠΈ.
Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅?
Вася Π΄Π΅Π»Π°Π΅Ρ‚

git pull origin master


ΠΈ Π²ΠΈΠ΄ΠΈΡ‚ Π² истории это


Π§Ρ‚ΠΎ это Π·Π° Ρ…Ρ€Π΅Π½ΡŒ? Π£ нас фактичСски всСго лишь 3 ΠΊΠΎΠΌΠΌΠΈΡ‚Π°: initial, ΠΎΠ΄ΠΈΠ½ ΠΎΡ‚ Васи ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΎΡ‚ ΠŸΠ΅Ρ‚ΠΈ.
Но Π² истории ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΡƒΠΆΠ΅ 4. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ‘merge branch master …’ Π½Π΅ нСсСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ смысловой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.
Плюс нСпонятноС ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅, Ρ‚ΠΎΠΆΠ΅ Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎΠ΅.
ΠœΡ‹ всСго лишь подтянули ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠŸΠ΅Ρ‚ΠΈ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π²Π΅Ρ‚ΠΊΠ΅, ΠΌΡ‹ Π½Π΅ сливали ΠΎΠ΄Π½Ρƒ Π²Π΅Ρ‚ΠΊΡƒ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ (с нашСй Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния).
А ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, ΠΊΠ°ΠΊΡƒΡŽ ΠΊΡƒΡ‡Ρƒ Ρ…Π»Π°ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ° послС дСсятка Ρ‚Π°ΠΊΠΈΡ… git pull.
Как это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ?


ВСрнСмся ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΡΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ git pull.
И сдСлаСм Π΅Π³ΠΎ Ρ‡ΡƒΡ‚ΡŒ ΠΈΠ½Π°Ρ‡Π΅

git pull —rebase origin master.


Π’Π΅ΠΏΠ΅Ρ€ΡŒ история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² выглядит Ρ‚Π°ΠΊ


ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ. ΠšΠΎΠΌΠΌΠΈΡ‚ ΠΎΡ‚ ΠŸΠ΅Ρ‚ΠΈ слСдуСт сразу Π·Π° initial, ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΎΡ‚ Васи самый свСТий.
МоТно ΠΏΡƒΡˆΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ Π½Π° сСрвСр.

git push origin master


ΠŸΡ€ΠΎΡΡ‚ΠΎ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, сколько Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π°ΡŽΡ‚, Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠ»ΠΈ просто Π½Π΅ Π·Π½Π°ΡŽΡ‚ ΠΎΠ± этой возмоТности.
Если всС Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ договорятся Π΄Π΅Π»Π°Ρ‚ΡŒ git pull —rebase, Ρ‚ΠΎ основныС Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ‡ΠΈΡ‰Π΅.
Но это ΠΌΡ‹ ΠΎΡ‚Π²Π»Π΅ΠΊΠ»ΠΈΡΡŒ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ.


ПослС этого Вася приступаСт ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄Π²Π°Π»Π° ΠΈ Π±Π»Π°Π³ΠΎΡ€Π°Π·ΡƒΠΌΠ½ΠΎ Π·Π°Π²ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ

git checkout -b new-footer


Π”Π°Π»ΡŒΡˆΠ΅ Вася Π΄Π΅Π»Π°Π΅Ρ‚ Π² Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚


Но Π·Π° это врСмя ΡˆΡƒΡΡ‚Ρ€Ρ‹ΠΉ ΠŸΠ΅Ρ‚Ρ ΡƒΠΆΠ΅ успСл Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ Π² мастСр ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠΎ тСксту Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ страницС.
Вася отвСтствСнный Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈ ΠΎΠ½ ΠΏΠΎΠΌΠ½ΠΈΡ‚, Ρ‡Ρ‚ΠΎ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ Π² свою Π²Π΅Ρ‚ΠΊΡƒ свСТий мастСр,
Π΄Π°Π±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π΅ Π»ΠΎΠΌΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠŸΠ΅Ρ‚ΠΈ (ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚).
Вася ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° мастСр, стягиваСт этот свСТий ΠΊΠΎΠΌΠΌΠΈΡ‚ (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‡Π΅Ρ€Π΅Π· git pull —rebase)
ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² свою Π²Π΅Ρ‚ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эти измСнСния Π²Π»ΠΈΡ‚ΡŒ Π² new-footer.

git checkout master

git pull —rebase origin master

git checkout new-footer


Π—Π°Π΄Π°Ρ‡Π° Васи — Π²Π»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ мастСр Π² свою Π²Π΅Ρ‚ΠΊΡƒ new-footer.
Вася Π΄Π΅Π»Π°Π΅Ρ‚

git merge master


ΠΈ Π²ΠΈΠ΄ΠΈΡ‚ это


Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ. ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈ ΠΎΠΏΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ лишний ‘merge branch’.
Π›Π°Π΄Π½ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ программисты Π½Π΅ видят Π² этом Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ ΠΈ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚,
Ρ‡Ρ‚ΠΎ хотят Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ вливался мастСр.
И ΠΊΠΎΠ³Π΄Π° мастСр заливался Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·. И Π² Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ. Ну Π²Ρ‹ поняли.
Π‘ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ, Ссли Π² коммСнтариях ΠΌΠ½Π΅ пояснят — Π·Π°Ρ‡Π΅ΠΌ?


Но оставим ΠΏΠΎΠΊΠ° Ρ‚Π°ΠΊ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ дальшС.
Вася Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ΄Π²Π°Π»Π΅


Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ тСстируСт свою Π²Π΅Ρ‚ΠΊΡƒ, убСТдаСтся, Ρ‡Ρ‚ΠΎ всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΈ сливаСт Π΅Π΅ Π² мастСр.

git checkout master

git merge —no-ff new-footer


Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, я дСлаю git merge с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ —no-ff, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² мастСрС Π±Ρ‹Π»ΠΈ Π²ΠΈΠ΄Π½Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, сдСланныС Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅.
Π§Π°Ρ‰Π΅ всСго встрСчаСтся ΠΈΠΌΠ΅Π½Π½ΠΎ такая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π΅ я ΠΈ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡΡŒ.
Π’ ΠΈΡ‚ΠΎΠ³Π΅ наша история выглядит Ρ‚Π°ΠΊ


Напомню, Π² Π²Π΅Ρ‚ΠΊΠ΅ new-footer всСго лишь 2 ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΎΡ‚ Васи.
Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ лишний merge ΠΈ лишнюю связь, которая Π½ΠΈ ΠΎ Ρ‡Π΅ΠΌ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚.
Π›Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ Π±Π°Ρ€Π΄Π°ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠ΅Ρ€Π΄ΠΆΠ°Ρ… Π² Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… Π²Π΅Ρ‚ΠΊΠ°Ρ….


git rebase Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² чистой ΠΈ понятной.
Π”Π°Π²Π°ΠΉΡ‚Π΅ всС исправим ΠΈ вСрнСмся ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΡΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ ΠΌΠ΅Ρ€Π΄ΠΆΠΈΡ‚ΡŒ мастСр Π² Π½Π°ΡˆΡƒ Π²Π΅Ρ‚ΠΊΡƒ


Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚Π°ΠΊ

git rebase master
ΠΈ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ


Намного Π»ΡƒΡ‡ΡˆΠ΅! ΠœΡ‹ просто ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ new-footer ΠΎΡ‚Π²Π΅Ρ‚Π²ΠΈΠ»Π°ΡΡŒ ΠΎΡ‚ мастСра Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ.
Вася Π΄Π΅Π»Π°Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚


И Π½Π°ΠΊΠΎΠ½Π΅Ρ† Вася сливаСт Π²Π΅Ρ‚ΠΊΡƒ new-footer Π² мастСр ΠΈ удаляСт Π΅Π΅.

git checkout master

git merge —no-ff new-footer

git branch -d new-footer


ΠžΡ‚Π»ΠΈΡ‡Π½Π°Ρ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°. ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ 2 ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Васи ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ сдСланы Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅.
А Ссли Вася подписывал Π±Ρ‹ Π½Π°Ρ‡Π°Π»ΠΎ своих ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Ρ‚ΠΊΠΈ, Π° Π½Π΅ своим ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‚ΠΎ история выглядСла Π±Ρ‹ Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅ :-)


ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡ†ΠΈΡŽ —no-ff. git merge ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ пытаСтся просто ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π½Π΅ дСлая ΠΌΠ΅Ρ€Π΄ΠΆΠ°.
Если ΠΌΡ‹ сдСлаСм просто git merge new-footer, Ρ‚ΠΎ итоговая история Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ


Π― Π»ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π½ΠΎ здСсь ΡƒΠΆΠ΅ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ договорСнности приняты Π² Π’Π°ΡˆΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.


P.S. Π•ΡΡ‚ΡŒ нСгласноС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ. Π‘Π΅Π· опаски ΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ git rebase смСло Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π’Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² своСй Π²Π΅Ρ‚ΠΊΠ΅ ΠΎΠ΄ΠΈΠ½.
Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π²Π΅Ρ‚ΠΊΠ΅ присоСдиняСтся ваш ΠΊΠΎΠ»Π»Π΅Π³Π°, подтягивайтС измСнСния ΠΈΠ· основной Π²Π΅Ρ‚ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· merge.
Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ rebase пСрСзаписываСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΈ ΠΏΡƒΡˆΠΈΡ‚ΡŒ Π½Π° сСрвСр Π²Π°ΠΌ придСтся с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ —force.
Но это ΡƒΠΆΠ΅ другая история.


P.P.S. К соТалСнию, ΠΊΡ€ΠΎΠΌΠ΅ нСзнания/нСумСния, Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° банальная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ программисты Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ rebase.
МногиС ΠΈΠ· нас Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π³ΠΈΡ‚ΠΎΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ срСдствами любимой IDE.
Π’Π°ΠΊ Π²ΠΎΡ‚ часто случаСтся, Ρ‡Ρ‚ΠΎ git pull Π² IDE ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ ставит ΠΎΠΏΡ†ΠΈΡŽ —rebase.
НуТно для этого Ρ‚Ρ‹ΠΊΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ чСкбокс.
И git merge находится Π±Π»ΠΈΠΆΠ΅ Π² мСню, Ρ‡Π΅ΠΌ git rebase.
И всС.


Π― Π΄ΠΎ сих ΠΏΠΎΡ€ вспоминаю Π΄ΠΎΠ±Ρ€Ρ‹ΠΌ словом своСго Ρ‚ΠΈΠΌΠ»ΠΈΠ΄Π° с ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚,
ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» ΠΏΠΎ максимуму Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π³ΠΈΡ‚ΠΎΠΌ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅.


ΠŸΡ€ΠΈΠ²Ρ‹ΠΊΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, Π’Ρ‹ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ возмоТностях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ инструмСнта.
Π― Π½Π΅ ΠΏΡ€ΠΈΠ·Ρ‹Π²Π°ΡŽ ΠΊ Ρ„Π°Π½Π°Ρ‚ΠΈΠ·ΠΌΡƒ ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ графичСского интСрфСйса.
Π•ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² IDE, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, просмотр истории ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ слиянии.
Но ΡƒΠ²Π΅Ρ€ΡΡŽ, Ρ‡Ρ‚ΠΎ 90-95% повсСднСвной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³ΠΈΡ‚ΠΎΠΌ быстрСС ΠΈ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅.
И Ρ‚ΠΎΠ³Π΄Π° сами собой ΠΏΡ€ΠΎΠΏΠ°Π΄ΡƒΡ‚ вопросы «Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ git pull —rebase ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² phpStorm»


Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ я ΡƒΠΌΠ½Ρ‹ΠΉ, ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ Как я пСрСстал Π±ΠΎΡΡ‚ΡŒΡΡ ΠΈ полюбил git


И нСбольшой опрос напослСдок



ВсС ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎ git

Анонсы статСй, обсуТдСния ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ², vue, Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°, php, Π³ΠΈΡ‚Π°.

Π˜ΡΡ‚ΠΎΡ€ΠΈΠΈ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ Π°ΠΉΡ‚ΠΈ ΠΈ обсуТдСниС ΠΊΠΎΠ΄Π°.

Как Π’Π°ΠΌ ΡΡ‚Π°Ρ‚ΡŒΡ? ΠžΡ†Π΅Π½ΠΈΡ‚Π΅!

ΠŸΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ? ПодСлись с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ πŸ™‚

Please enable JavaScript to view the comments powered by Disqus.

Π·Π°Ρ‡Π΅ΠΌ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Git Merge ΠΈ Git Rebase ΠΏΡ€Π΅ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ†Π΅Π»ΡŒ. Они ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Π₯отя конСчная Ρ†Π΅Π»ΡŒ одинаковая, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅.

НСкоторыС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Rebase, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Merge. Π’ этом Π΅ΡΡ‚ΡŒ свои ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы.

Git Merge

БлияниС β€” обычная ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… систСмы контроля вСрсий. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, созданы Π»ΠΈ Π²Π΅Ρ‚ΠΊΠΈ для тСстирования, исправлСния ошибок ΠΈΠ»ΠΈ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, слияниС фиксируСт измСнСния Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС. БлияниС ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ содСрТимоС Π²Π΅Ρ‚ΠΊΠΈ источника ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΈΡ… с Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ. Π’ этом процСссС измСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ цСлСвая Π²Π΅Ρ‚ΠΊΠ°. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ исходных Π²Π΅Ρ‚ΠΎΠΊ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠŸΠ»ΡŽΡΡ‹:

  • простота;
  • сохраняСт ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ хронологичСский порядок;
  • ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ контСкст Π²Π΅Ρ‚ΠΊΠΈ.

ΠœΠΈΠ½ΡƒΡΡ‹:

  • история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° (загрязнСна) мноТСством ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²;
  • ΠΎΡ‚Π»Π°Π΄ΠΊΠ° с использованиСм git bisect ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ слоТнСС.

Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ

Π‘Π»Π΅ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ master Π² Π²Π΅Ρ‚ΠΊΡƒ feature, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ checkout ΠΈ merge.

Π­Ρ‚ΠΎ создаст Π½ΠΎΠ²Ρ‹ΠΉ Β«Merge commitΒ» Π² Π²Π΅Ρ‚ΠΊΠ΅ feature, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΎΠ±Π΅ΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ.

Git Rebase

Rebase β€” Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ пСрСнСсти измСнСния ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Rebase сТимаСт всС измСнСния Π² ΠΎΠ΄ΠΈΠ½ Β«ΠΏΠ°Ρ‚Ρ‡Β». Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ‚Ρ‡ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ слияния, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ пСрСзаписываСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Π’ процСссС устраняСтся Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ история.

ΠŸΠ»ΡŽΡΡ‹:

  • Π£ΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ
  • Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ манипуляций с СдинствСнным ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ
  • ИзбСТаниС слияния ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² занятых рСпозиториях ΠΈ Π²Π΅Ρ‚ΠΊΠ°Ρ…
  • ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, дСлая ΠΈΡ… ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для DevOps ΠΊΠΎΠΌΠ°Π½Π΄

ΠœΠΈΠ½ΡƒΡΡ‹:

  • Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Ρ„ΠΈΡ‡ Π΄ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ контСкст
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ опасным ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅
  • ΠŸΠΎΡΠ²Π»ΡΠ΅Ρ‚ΡΡ большС Ρ€Π°Π±ΠΎΡ‚Ρ‹
  • Для восстановлСния с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ трСбуСтся ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡˆ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ обновлСнию всСх Π²Π΅Ρ‚ΠΎΠΊ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя, ΠΊΠ°ΠΊ локально, Ρ‚Π°ΠΊ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ, ΠΈ это уТасно.

Если Π²Ρ‹ сдСлаСтС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, история измСнится, Π° это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, поэтому ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚Π΅!

Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ feature Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ всю Π²Π΅Ρ‚ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π³Π»Π°Π²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° измСняСтся, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² основной Π²Π΅Ρ‚ΠΊΠ΅.

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎ позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΏΡ€ΠΈ ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Π² Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Π­Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ автоматичСскоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ обСспСчиваСт ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ историСй ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для очистки истории Π΄ΠΎ слияния Π²Π΅Ρ‚ΠΊΠΈ feature Π² master.

Π­Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, пСрСчислив всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Ρ‹.

Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ опрСдСляСт, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ° послС выполнСния пСрСмСщСния. Упорядочивая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ fixup, squash, edit, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Какой ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅? Π§Ρ‚ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ экспСрты?

Π’Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ СдинствСнно ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅. Всё зависит ΠΎΡ‚ потрСбностСй ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°ΠΉΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° основании ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Git. Для вас Π²Π°ΠΆΠ½Π° простота ΠΈΠ»ΠΈ пСрСзаписываниС истории, Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅?

Π§Ρ‚ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ я?

По ΠΌΠ΅Ρ€Π΅ роста ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ становится слоТно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ измСнСния Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, примСняя слияниС. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‡ΠΈΡΡ‚ΡƒΡŽ ΠΈ ΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Rebase.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Rebase:

  • Π’Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ локально: Ссли Π²Ρ‹ Π½Π΅ дСлились своСй Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с ΠΊΠ΅ΠΌ-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ слиянию, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ свою ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π² порядкС. Если Ρƒ вас Π΅ΡΡ‚ΡŒ личная Π²ΠΈΠ»ΠΊΠ° рСпозитория, которая Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ совмСстно с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ rebase Π΄Π°ΠΆΠ΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΠ»ΠΈΡΡŒ Π² свою Π²Π΅Ρ‚ΠΊΡƒ.
  • Π’Π°Ρˆ ΠΊΠΎΠ΄ Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ€Π΅Π²ΡŒΡŽ: Π²Ρ‹ создали ΠΏΡƒΠ»Π» рСквСст. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Π²Π°ΡˆΡƒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΡΡ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‚ Π΅Π΅ ΠΊ своСй Π²ΠΈΠ»ΠΊΠ΅ для локального Ρ€Π΅Π²ΡŒΡŽ. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ Β«ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒΒ» ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ запросы Π½Π° ΠΏΡƒΠ»Π» рСквСст ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠΌΠΊΡƒ истории.
  • РСвью сдСлано ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΎ ΠΊ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΠ΅ΠΌ! Π’Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ свою Π²Π΅Ρ‚ΠΊΡƒ feature. Учитывая, Ρ‡Ρ‚ΠΎ с этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ fetch-merging эти измСнСния, это ваш шанс ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. На этом этапС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΈ эти Π½Π°Π΄ΠΎΠ΅Π΄Π»ΠΈΠ²Ρ‹Π΅ Β«ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»ΠΊΠΈΒ» ΠΈ «слияниС» ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² нСбольшой Π½Π°Π±ΠΎΡ€ Ρ†Π΅Π»Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ явного слияния для этих ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Он записываСт, ΠΊΠΎΠ³Π΄Π° функция достигла master.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ Ρ…ΠΎΡ‚ΡŒ ΠΈ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ, Π½ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Merge ΠΈ Rebase. Π£Π²Π΅Ρ€Π΅Π½, Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π°ΠΌ.НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅:

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ An Introduction to Git Merge and Git Rebase: What They Do and When to Use Them ΠΎΡ‚ Digital Skynet πŸ™‚

Π‘Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Merge ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π² Git / Π₯Π°Π±Ρ€

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ читатСлям «Π₯Π°Π±Ρ€Π°Ρ…Π°Π±Ρ€Π°» ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ «Painless Merge Conflict Resolution in Git»
ΠΈΠ· Π±Π»ΠΎΠ³Π° blog.wuwon.id.au.

Π’ ΠΌΠΎΠ΅ΠΉ повсСднСвной Ρ€Π°Π±ΠΎΡ‚Π΅, часто приходится ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ со мноТСством git Π²Π΅Ρ‚Π²Π΅ΠΉ (branch). Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅Ρ‚Π²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·ΠΎΠ², Π²Π΅Ρ‚Π²ΠΈ с ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ API находящиСся Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΈΠ»ΠΈ Π²Π΅Ρ‚Π²ΠΈ с ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ свойствами. Π›Ρ‘Π³ΠΊΠΎΡΡ‚ΡŒ создания Π²Π΅Ρ‚Π²Π΅ΠΉ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ Git Ρ‚Π°ΠΊ ΠΈ соблазняСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ всС большС ΠΈ большС Π²Π΅Ρ‚Π²Π΅ΠΉ, ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ брСмя ΠΎΡ‚ большого количСства Π²Π΅Ρ‚Π²Π΅ΠΉ становится ΠΎΡ‡Π΅Π½ΡŒ ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΡ‹ΠΌ, ΠΊΠΎΠ³Π΄Π° приходится всС эти Π²Π΅Ρ‚Π²ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ пСриодичСски Π΄Π΅Π»Π°Ρ‚ΡŒ слияния (merge) с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ вСтвями.

Блияния ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ для поддСрТания ΠΊΠΎΠ΄Π° Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии, ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ошибка сдСланная ΠΏΡ€ΠΈ слиянии ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ большСй Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ, Π½Π΅ΠΆΠ΅Π»ΠΈ ошибка сдСланная ΠΏΡ€ΠΈ простом ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅. К соТалСнию ошибки слияния Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Ρ€Π΅Π΄ΠΊΠΎΡΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ… слияния ΠΈΠΌΠ΅ΡŽΡ‚ нСсколько Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π²Π΅Ρ‚Π²Π΅ΠΉ. Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ истории слияния Π²Π΅Ρ‚Π²Π΅ΠΉ, Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ измСнСния Π±Ρ‹Π»ΠΈ сдСланы для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΎΡ‚ΠΌΠ΅Π½Π° Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ слияния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΎΠ»ΠΎΠ²Π½ΡƒΡŽ боль. Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, большая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² слияния происходит ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‡ΡƒΠΆΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ само понятиС Π²Π΅Ρ‚Π²Π΅ΠΉ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ мноТСство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚.Π΅. Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда слияниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π» с Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ. Π’ сухом остаткС, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ слиянии ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ, Π΅Ρ‘ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°ΠΉΡ‚ΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ врСмя ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ процСсса слияния Π²Π΅Ρ‚Π²Π΅ΠΉ, окупится с Π»ΠΈΡ…Π²ΠΎΠΉ.

Π£Π΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ я ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ доступныС инструмСнты ΠΈ интСрфСйсы ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для выполнСния слияний, Π½Π΅ достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΎ оснащСны для эффСктивного выполнСния этого процСсса. Часто программист просто надССтся Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° git merge сдСлаСт Π·Π° Π½Π΅Π³ΠΎ всю Ρ€Π°Π±ΠΎΡ‚Ρƒ. Но ΠΊΠΎΠ³Π΄Π° всС-Ρ‚Π°ΠΊΠΈ происходит ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚, Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ стратСгия слияния Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π±Π΅Π³Π»ΠΎΠΌ просмотрС ΠΊΠΎΠ΄Π° Π²ΠΎΠΊΡ€ΡƒΠ³ строки ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°, ΠΈ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎΠΌ ΡƒΠ³Π°Π΄Ρ‹Π²Π°Π½ΠΈΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ кусок ΠΊΠΎΠ΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅ΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я надСюсь ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ процСсс Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пошагово Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Ρ‚Π°ΠΌ ΡƒΠ³Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ.

Π“ΠΎΠ»ΡƒΠ±Ρ‹Π΅ Π ΠΎΠ·Ρ‹ (Roses are Blue)

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρ‡Ρ‚ΠΎ вашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΠΎΡ€ΡƒΡ‡ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ поэмы Π² ΠΎΡ‚Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ для этих Ρ†Π΅Π»Π΅ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. (Какой ΠΊΠΎΡˆΠΌΠ°Ρ€!) А Π²Π°ΠΌ Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ самоС Π³Π»Π°Π²Π½ΠΎΠ΅ β€” Π΄Π΅Π»Π°Ρ‚ΡŒ слияния послСдних фиксов ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ master Π² Π²Π΅Ρ‚ΠΊΡƒ beta. Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ΡΡŒ Π² Π²Π΅Ρ‚ΠΊΡƒ beta ΠΈ выполняСтС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ git merge master
Auto-merging roses.txt
CONFLICT (content): Merge conflict in roses.txt
Automatic merge failed; fix conflicts and then commit the result.

Ого, это ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚. Π’Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся git:

$ cat roses.txt
<<<<<<< HEAD
roses are #ff0000
violets are #0000ff
all my base
are belong to you
=======
Roses are red,
Violets are blue,
All of my base
Are belong to you.
>>>>>>> master

(Listing 1)

Π—Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ! Π’Π΅ΡΡŒ Ρ„Π°ΠΉΠ», ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Listing 1, находится Π² ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π½ΠΎΠΌ состоянии. Какой ΠΆΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ„Π°ΠΉΠ»Π° являСтся Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ? Оба Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° выглядят ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ написан Π² Ρ…Π°ΠΊΠ΅Ρ€-стилС с элСмСнтами Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² стилС HTML ΠΈ с использованиСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строчных Π±ΡƒΠΊΠ². НиТний Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ выглядит Π±ΠΎΠ»Π΅Π΅ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎ, с использованиСм ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΠΈ ΠΈ Π·Π°Π³Π»Π°Π²Π½Ρ‹Ρ… Π±ΡƒΠΊΠ².

Если Π±Ρ‹ это Π±Ρ‹Π» ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π²Ρ‹ Π±Ρ‹ ΠΌΠΎΠ³Π»ΠΈ просто Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈ ΠΏΠΎΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ с этим слияниСм. Но ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Π½Π΅ ваша поэма, Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ‡ΠΈΡ‚Π°Π»ΠΈ эту поэму Ρ€Π°Π½ΡŒΡˆΠ΅, Π½Π΅ Π±Ρ‹Π»ΠΈ отвСтствСнны Π·Π° написаниС ΠΈΠ»ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈ Π²Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ Π² случаС Π½Π΅ Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‡ΡŒΡ-Ρ‚ΠΎ тяТёлая Ρ€Π°Π±ΠΎΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°Π½ΡƒΡ‚ΡŒ Π² Π½Π΅Π±Ρ‹Ρ‚ΠΈΠ΅. Однако вас всё ΠΆΠ΅ Π½Π°Π·Π½Π°Ρ‡ΠΈΠ»ΠΈ отвСтствСнным ΠΏΠΎ слиянию этих Π²Π΅Ρ‚ΠΎΠΊ. Π§Ρ‚ΠΎ ΠΆΠ΅ Π²Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ?

Назад ΠΊ Π‘Π°Π·Π΅ (Back to Base)

Π₯ΠΈΡ‚Ρ€ΠΎΡΡ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Listing 1 Π½Π΅ Π΄Π°Ρ‘Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ слияния. На самом Π΄Π΅Π»Π΅, Π² процСссС слияния ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… части ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (состояния), Ρ‚Ρ€ΠΈ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°. Π’ случаС Listing 1, Git прСдоставил Π²Π°ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° состояния.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ эти Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ состояния:

Бостояния (B) ΠΈ Β© относятся ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ полоТСниям (head) Π²Π΅Ρ‚ΠΎΠΊ master ΠΈ beta соотвСтствСнно, эти Π΄Π²Π° состояния ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚Π°ΠΊΠΈ ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² Listing 1. БостояниС (D) это Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ слияния, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ/ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ (Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Git автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ состояниС (D)). БостояниС (А) Π½Π° самом Π²Π΅Ρ€Ρ…Ρƒ, прСдставляСт собой Π±Π°Π·Ρƒ (основу) слияния Π²Π΅Ρ‚ΠΎΠΊ master ΠΈ beta. Π‘Π°Π·Π° слияния (A) это послСдний ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΎΠΊ Π²Π΅Ρ‚ΠΎΠΊ master ΠΈ beta, ΠΈ ΠΏΠΎΠΊΠ° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρ‡Ρ‚ΠΎ это Π±Π°Π·Π° слияния ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°. Как ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅ состояниС (A) ΠΈΠ³Ρ€Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ². На Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ я Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚Ρ€Π°Π·ΠΈΠ» Π΄Π΅Π»ΡŒΡ‚Ρ‹ 1 ΠΈ 2, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ измСнСния ΠΌΠ΅ΠΆΠ΄Ρƒ состояниями (A)-(B), ΠΈ (A)-Β© соотвСтствСнно. Зная состояния (A), (B) ΠΈ Β© Π΄Π΅Π»ΡŒΡ‚Ρ‹ 1 ΠΈ 2 ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ (вычислСны). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»ΡŒΡ‚Ρ‹ 1 ΠΈ 2 ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Но для Π½Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ всС Π΄Π΅Π»ΡŒΡ‚Ρ‹ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ состояниС (D), Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ опСрация слияния пытаСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. БостояниС (D) Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой сочСтаниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, внСсённых Π² Π²Π΅Ρ‚ΠΊΡƒ master ΠΈ beta соотвСтствСнно. Π’.Π΅. Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами сочСтаниС Π΄Π΅Π»ΡŒΡ‚ 1 ΠΈ 2. ИдСя проста Π½Π° повСрхности ΠΈ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° со стороны Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ особых случаСв ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΡŒΡ‚Ρ‹ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ наслаиваСмыС (ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ) части Ρ„Π°ΠΉΠ»Π°. Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации Π²Π°ΠΌ трСбуСтся ΠΏΠΎΠΌΠΎΡ‡ΡŒ машинС ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ (D), ΠΏΡƒΡ‚Ρ‘ΠΌ сравнСния Π΄Π΅Π»ΡŒΡ‚ 1 ΠΈ 2.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠžΡ‚Π»ΠΈΡ‡ΠΈΠΉ (Identifying the Differences)

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ измСнСния внСсённыС Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ выглядит Π±Π°Π·Π° слияния, состояниС (A). Π‘Π°ΠΌΡ‹ΠΉ простой ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π±Π°Π·Π΅ слияния, это установка ΠΎΠΏΡ†ΠΈΠΈ merge.conflictstyle Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ diff3

$ git config merge.conflictstyle diff3

ПослС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ этой ΠΎΠΏΡ†ΠΈΠΈ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ слияниС (git reset —hard; git merge master) ΠΈ проинспСктируйтС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» Π΅Ρ‰Ρ‘ Ρ€Π°Π·:

$ cat roses.txt
<<<<<<< HEAD
roses are #ff0000
violets are #0000ff
all my base
are belong to you
|||||||
roses are red
violets are blue
all my base
are belong to you
=======
Roses are red,
Violets are blue,
All of my base
Are belong to you.
>>>>>>> master

(Listing 2)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ посСрСдинС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ являСтся Π±Π°Π·ΠΎΠΉ слияния ΠΈΠ»ΠΈ состояниС (A). ИзмСнСния Π²ΠΈΠ΄Π½Ρ‹ ΠΊΠ°ΠΊ Π½Π° Π»Π°Π΄ΠΎΠ½ΠΈ: Π² Π²Π΅Ρ‚ΠΊΠ΅ beta (HEAD) чСловСчСскиС названия Ρ†Π²Π΅Ρ‚ΠΎΠ² Π±Ρ‹Π»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° HTML ΠΊΠΎΠ΄Ρ‹, Π° Π² Π²Π΅Ρ‚ΠΊΡƒ master Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊΠ°ΠΏΠΈΡ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΡŽ. ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° этих знаниях, ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя ΠΊΠ°ΠΏΠΈΡ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΡŽ ΠΈ HTML ΠΊΠΎΠ΄Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ².

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π° этом ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ достигнут. Но Π΅ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅.

ГрафичСскоС БлияниС (GUI Merging)

Π₯отя ΠΈ простоС тСкстовоС прСдставлСниС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° слияния Π΄Π΅Π»Π°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² простых случаях, Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ слоТными. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ графичСскиС инструмСнты. Мой Π²Ρ‹Π±ΠΎΡ€ ΠΏΠ°Π» Π½Π° простой инструмСнт написанный Π½Π° Python ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ meld, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠΉΡ‚ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ графичСский инструмСнт, способный ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ слияниС Π² Ρ‚Ρ€Ρ‘Ρ…-ΠΊΠΎΠ»ΠΎΠ½ΠΎΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.

Для использования графичСского инструмСнта (ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн), послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ git поТаловался Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ git mergetool

ΠŸΠΎΡΠ»Π΅Π΄ΡƒΠ΅Ρ‚ вопрос ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ для слияния Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, просто Π²Π²Π΅Π΄ΠΈΡ‚Π΅ meld ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Enter. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ (подразумСваСтся опция merge.conflictstyle Π½Π΅ Π±Ρ‹Π»Π° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°):

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ информация прСдставлСна Π±ΠΎΠΊ ΠΎ Π±ΠΎΠΊ, ΠΎΠ½Π° Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π² Listing 2. ΠœΡ‹ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ здСсь Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° Π±Π°Π·Ρ‹ слияния (состояния (A)), Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ это Ρ„Π°ΠΉΠ» roses.txt.LOCAL.2760.txt Π² Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ ΠΈ Ρ„Π°ΠΉΠ» roses.txt.REMOTE.2760.txt Π² ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ ΠΈ Ρ„Π°ΠΉΠ» посСрСдинС это Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ΅ слияниС. Π’.Π΅. ΠΏΠΎ сути Π½Π°ΠΌ прСдставили состояния (B), Β© ΠΈ Π½Π΅ΡΠΎΡΡ‚ΠΎΡΠ²ΡˆΠ΅Π΅ΡΡ состояниС (D), Π½ΠΎ состояниС (A) отсутствуСт…

ΠŸΡ€Π°Π²Π΄Π° отсутствуСт? Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Π² старом Π΄ΠΎΠ±Ρ€ΠΎΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅:

$ ls -1
roses.txt
roses.txt.BACKUP.2760.txt
roses.txt.BASE.2760.txt
roses.txt.LOCAL.2760.txt
roses.txt.REMOTE.2760.txt

Π’ΠΈΠ΄ΠΈΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠΉ нас Ρ„Π°ΠΉΠ»: roses.txt.BASE.2760.txt. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π±Π°Π·Ρ‹ слияния. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ всСго лишь Π½Π°ΠΉΡ‚ΠΈ измСнСния внСсённыС Π² Π²Π΅Ρ‚ΠΊΠΈ master ΠΈ beta, ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π±Π°Π·Π΅. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это двумя ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ meld:

$ meld roses.txt.LOCAL.2760.txt roses.txt.BASE.2760 &
$ meld roses.txt.BASE.2760 roses.txt.REMOTE.2760.txt &

(ΠšΡ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ, ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ порядок Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„Π°ΠΉΠ» Π±Π°Π·Ρ‹ находился Π² Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ Π² ΠΎΠ±ΠΎΠΈΡ… случаях, Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ порядок сохраняСт ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Ρ‚Ρ€Ρ‘Ρ…-ΠΊΠΎΠ»ΠΎΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Π°Π·Π° остаётся ΠΏΠΎ сСрСдинС.) Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния β€” Π΄Π²Π° ΠΎΠΊΠ½Π° ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° справа Π½Π°Π»Π΅Π²ΠΎ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, становится ясно ΠΊΠ°ΠΊ дСнь, ΠΊΠ°ΠΊΠΈΠ΅ измСнСния ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ meld любСзно подсвСтил всС измСнСния, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ практичСски Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΄Π°ΠΆΠ΅ ΠΌΠ΅Π»ΠΊΠΎ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΊΠΈ (ΠšΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠ³Π° «of» ΠΏΡ€ΠΈ просмотрС тСкстового прСдставлСния Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Listing 1 ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Listing 2?)

Π’ΠΎΠΎΡ€ΡƒΠΆΠΈΠ²ΡˆΠΈΡΡŒ этими знаниями, ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Ρ‚Ρ€Ρ‘Ρ…-ΠΊΠΎΠ»ΠΎΠ½ΠΎΡ‡Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ измСнСния. Моя стратСгия Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ слияния это Π²Π·ΡΡ‚ΡŒ вСсь тСкст ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ с Π±ΠΎΠ»Π΅Π΅ вСсомыми измСнСниями (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС master/REMOTE Ρ‚.Π΅. beta), ΠΈ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π½Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΊΠΈ, Ρ‚.Π΅. Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния сдСланныС Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ (master). Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ:

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ всё вмСстС (All Together Now)

НадСюсь, Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ этот Ρ‚Ρ€Ρ‘Ρ…-ΠΎΠΊΠΎΡˆΠ΅Ρ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΊΠ°ΠΊΠΈΠΌ Π½Π°Ρ…ΠΎΠΆΡƒ Π΅Π³ΠΎ я. Но ΡΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ meld Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ², Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚ΠΎ ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Π’Ρ‹Ρ…ΠΎΠ΄, это Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ git Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Ρ‚Ρ€ΠΈ ΠΎΠΊΠ½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π»ΠΈΡΡŒ автоматичСски ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git mergetool. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ выполняСмый скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ находится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния PATH (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ $HOME/bin/gitmerge), со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым:

#!/bin/sh
meld $2 $1 &
sleep 0.5
meld $1 $3 &
sleep 0.5
meld $2 $4 $3

И Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π² ваш ~/.gitconfig Ρ„Π°ΠΉΠ»:

[merge]
    tool = mymeld
[mergetool "mymeld"]
    cmd = $HOME/bin/gitmerge $BASE $LOCAL $REMOTE $MERGED

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π· Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git mergetool для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°, ΠΎΡ‚ΠΊΡ€ΠΎΡŽΡ‚ΡΡ всС Ρ‚Ρ€ΠΈ ΠΎΠΊΠ½Π°:

Окно Π΄ΠΈΡ„Π° ΠΌΠ΅ΠΆΠ΄Ρƒ BASE ΠΈ LOCAL
Окно Π΄ΠΈΡ„Π° ΠΌΠ΅ΠΆΠ΄Ρƒ BASE ΠΈ REMOTE
Окно Ρ‚Ρ€Ρ‘Ρ…-ΠΊΠΎΠ»ΠΎΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½ΠΈΡ‚Π΅ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² с использованиСм Ρ‚Ρ€Ρ‘Ρ… Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Ρ… ΠΎΠΊΠΎΠ½, Π²Ρ‹ скорСС всСго ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ процСсс стал Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ мСханичСским. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, Π²Π°ΠΌ Π΄Π°ΠΆΠ΅ Π½Π΅ придётся Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ куски ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ ΠΆΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ для слияния. Π’Π°ΠΌ большС Π½Π΅ понадобится Π΄ΠΎΠ³Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Π² коррСктности вашСго ΠΊΠΎΠΌΠΈΡ‚Π°. Из-Π·Π° этой увСрСнности, появится чувство Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ Π² ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ занятиС.

Бонус ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

Для Ρ‚Π΅Ρ… ΠΊΡ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ tmux ΠΈ n?vim, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ скрипт gitmerge:

#!/bin/sh
sn=gitmerge

tmux new-session -d -s "$sn" -n "diff3" "nvim -d $2 $4 $3"
tmux split-window -t "$sn:1" -v "nvim -d $2 $1"
tmux split-window -t "$sn:1" -h "nvim -d $1 $3"

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ссли Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ эту ΠΎΠΏΡ†ΠΈΡŽ Π² своСм ~/.tmux.conf, Ρ‚ΠΎ Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Π΄Π²ΡƒΡ… послСдних строках "$sn:1" Π½Π° "$sn:0"

БоотвСтствСнно Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π² ваш ~/.gitconfig

[mergetool "gitmerge"]
    cmd = $HOME/bin/gitmerge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
[merge]
    tool = gitmerge

Π’ΠΎΡ€ΠΊΡ„Π»ΠΎΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Пока ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌ вопрос (Was the merge successful [y/n]?) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π² сСссию ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ gitmerge (сочСтаниС TMUXPREFIX + s):

Π’ΠΈΠ΄ΠΈΠΌ нашС Ρ‚Ρ€Ρ‘Ρ…-ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ прСдставлСниС Π½Π° ΠΎΠ΄Π½ΠΎΠΌ экранС. Π¦ΠΈΡ„Ρ€Π°ΠΌΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ сплиты (panes) tmux’a, Π±ΡƒΠΊΠ²Π°ΠΌΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ состояния. Π”Π΅Π»Π°Π΅ΠΌ ΠΏΡ€Π°Π²ΠΊΠΈ для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°, Ρ‚.Π΅. Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ состояниС (D) ΠΈ сохраняСм. ПослС этого возвращаСмся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ сСссию tmux’a ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ слияниС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

git rebase master

Π›ΠΈΡ‡Π½ΠΎ я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ сначала rebase master Π² Π²Π΅Ρ‚ΠΊΠ΅ beta, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС этого ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² master ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ git merge beta. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π²ΠΎΡ€ΠΊΡ„Π»ΠΎΡƒ Π½Π΅ сильно отличаСтся, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Ρ€Ρ‘Ρ…-ΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°.

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π² сСссию gitmerge

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ состояния (B) ΠΈ Β© помСнялись мСстами:

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ всСм ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ рСпозитария хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΏΠΎ Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ схСмС. Π›ΠΈΡ‡Π½ΠΎ я большС Π½Π΅ гадаю Π° Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ «Accept theirs» ΠΈΠ»ΠΈ «Accept yours».

Git Merge | Π£Ρ‡Π΅Π±Π½ΠΈΠΊ Atlassian Git

БлияниС — это способ Git снова ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»Π΅Π½Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. Команда git merge позволяСт Π²Π°ΠΌ Π²Π·ΡΡ‚ΡŒ нСзависимыС Π»ΠΈΠ½ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, созданныС git branch , ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΎΠ΄Π½Ρƒ Π²Π΅Ρ‚ΠΊΡƒ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ всС прСдставлСнныС Π½ΠΈΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. ВСкущая Π²Π΅Ρ‚ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒ слияниС, Π½ΠΎ цСлСвая Π²Π΅Ρ‚ΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ git merge часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСстС с git checkout для Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚Π²ΠΈ ΠΈ git branch -d для удалСния ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ.

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Git merge ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ нСсколько ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Π΅Π΄ΠΈΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. Π’ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ частых случаях использования git merge ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для объСдинСния Π΄Π²ΡƒΡ… Π²Π΅Ρ‚ΠΎΠΊ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ Π±ΡƒΠ΄ΡƒΡ‚ сосрСдоточСны Π½Π° этом шаблонС слияния Π²Π΅Ρ‚Π²Π΅ΠΉ.Π’ этих сцСнариях git merge ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° указатСля фиксации, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это подсказки Π²Π΅Ρ‚ΠΎΠΊ, ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±Ρ‰ΡƒΡŽ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Git Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΎΠ±Ρ‰ΡƒΡŽ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, ΠΎΠ½ создаст Π½ΠΎΠ²ΡƒΡŽ Β«Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ слияния», которая ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ измСнСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ поставлСнной Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ фиксации слияния.

Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ новая функция вСтвлСния, основанная Π½Π° Π²Π΅Ρ‚ΠΊΠ΅ master . Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ с master .

Π’Ρ‹Π·ΠΎΠ² этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π΅Ρ‚ΠΊΠΈ с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚Π²ΡŒΡŽ, ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ master .Git автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ слияния (обсуТдаСтся Π½ΠΈΠΆΠ΅).

ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ слияния ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. ΠŸΡ€ΠΈ создании фиксации слияния Git попытаСтся автоматичСски Π²ΠΎΠ»ΡˆΠ΅Π±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ истории. Если Git ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ Π² ΠΎΠ±Π΅ΠΈΡ… историях, ΠΎΠ½ Π½Π΅ смоТСт автоматичСски ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ…. Π­Ρ‚ΠΎΡ‚ сцСнарий прСдставляСт собой ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ управлСния вСрсиями, ΠΈ для продолТСния Git потрСбуСтся Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ слиянию

ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ слияния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ нСсколько ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… шагов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π²Π½ΠΎΠ΅ слияниС.

ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git status , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ° слияния. ΠŸΡ€ΠΈ нСобходимости Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git checkout , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ. Π’ нашСм случаС ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ git checkout master.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСдниС ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ Π²Π΅Ρ‚Π²ΡŒ ΠΈ Π²Π΅Ρ‚Π²ΡŒ слияния ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ послСдних ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git fetch , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСдниС ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹.ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π² Π²Π΅Ρ‚ΠΊΠ΅ master Π΅ΡΡ‚ΡŒ послСдниС обновлСния, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² git pull.

БлияниС

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Ρ€Π°Π½Π΅Π΅ описанныС шаги Β«ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ слиянию», слияниС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² git merge , Π³Π΄Π΅ — это имя Π²Π΅Ρ‚Π²ΠΈ, которая Π±ΡƒΠ΄Π΅Ρ‚ объСдинСна с ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ Π²Π΅Ρ‚Π²ΡŒΡŽ.

БыстроС слияниС Π²ΠΏΠ΅Ρ€Π΅Π΄

БлияниС с ускорСнной ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΎΠΉ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° сущСствуСт Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π²Π΅Ρ‚Π²ΠΈ ΠΊ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ.ВмСсто «фактичСского» слияния Π²Π΅Ρ‚Π²Π΅ΠΉ всС, Ρ‡Ρ‚ΠΎ Git Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ историй, — это ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Β«ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚Π°Ρ‚ΡŒ Π²ΠΏΠ΅Ρ€Π΅Π΄Β») ΠΊΠΎΠ½Π΅Ρ† Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π²Π²Π΅Ρ€Ρ… Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ. Π­Ρ‚ΠΎ эффСктивно ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ истории, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, доступныС ΠΈΠ· Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ доступны Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ. НапримСр, быстроС слияниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с master Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Однако быстроС слияниС Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ссли Π²Π΅Ρ‚Π²ΠΈ Ρ€Π°Π·ΠΎΡˆΠ»ΠΈΡΡŒ.Когда Π½Π΅Ρ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ, Git Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π°, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ трСхстороннСго слияния. ВрСхстороннСС слияниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ для связывания Π΄Π²ΡƒΡ… историй. НомСнклатура исходит ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° слияния: Π΄Π²Π΅ подсказки Π²Π΅Ρ‚ΠΎΠΊ ΠΈ ΠΈΡ… ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΎΠΊ.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· этих стратСгий слияния, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слияния с ускорСнной ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΎΠΉ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пСрСбазирования) для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ исправлСний ошибок, сохраняя ΠΏΡ€ΠΈ этом 3-сторонниС слияния для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.Π’ послСднСм случаС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ фиксация слияния слуТит символичСским объСдинСниСм Π΄Π²ΡƒΡ… Π²Π΅Ρ‚Π²Π΅ΠΉ.

Наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт быстроС слияниС. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ создаСт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, добавляСт ΠΊ Π½Π΅ΠΉ Π΄Π²Π΅ фиксации, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ строку с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ быстрого слияния.

  # ΠΠ°Ρ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ git checkout -b new-feature master # ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ git add git commit -m "Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ" # ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ git add git commit -m "Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ" # Π‘Π»ΠΈΡ‚ΡŒ с Π½ΠΎΠ²Ρ‹ΠΌ -feature branch git checkout master git merge new-feature git branch -d new-feature  

Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс для ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… тСматичСских Π²Π΅Ρ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ большС ΠΊΠ°ΠΊ изолированная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Ρ‡Π΅ΠΌ ΠΊΠ°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ инструмСнт для Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Git Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° git branch -d , Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ новая функция Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ доступна ΠΈΠ· основной Π²Π΅Ρ‚ΠΊΠΈ.

Π’ случаС, Ссли Π²Π°ΠΌ трСбуСтся фиксация слияния Π²ΠΎ врСмя слияния с ускорСнной ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΎΠΉ Π²ΠΏΠ΅Ρ€Π΅Π΄ для Ρ†Π΅Π»Π΅ΠΉ вСдСния записСй, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git merge с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ --no-ff .

  git слияниС --no-ff  

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚Π²ΡŒΡŽ, Π½ΠΎ всСгда Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ слияния (Π΄Π°ΠΆΠ΅ Ссли это Π±Ρ‹Π»ΠΎ слияниС с ускорСнной ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΎΠΉ Π²ΠΏΠ΅Ρ€Π΅Π΄).Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для докумСнтирования всСх слияний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят Π² вашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

3-стороннСС слияниС

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ трСхстороннСго слияния, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ master выполняСтся, ΠΏΠΎΠΊΠ° функция выполняСтся. Π­Ρ‚ΠΎ распространСнный сцСнарий для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° нСсколько Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

  Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ git checkout -b new-feature master # ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ git add git commit -m "Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ" # ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ git add git commit -m "Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ" # Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ git checkout master # ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ git add git commit -m "ВнСситС ΡΠ²Π΅Ρ€Ρ…ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ измСнСния Π² master" # БлияниС Π² Π²Π΅Ρ‚ΠΊΠ΅ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ git merge new-feature git branch -d new-feature  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ для Git Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ быстроС слияниС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅Ρ‚ способа ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ master Π² new-feature Π±Π΅Π· Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°.

Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов новая функция Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, поэтому Ρ‚Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π½Π° master Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. Если ваша Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‚ΠΊΠ° Π½Π° самом Π΄Π΅Π»Π΅ Π±Ρ‹Π»Π° Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ малСнькой, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π²Π°ΠΌ, вСроятно, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΅Π΅ Π½Π° master ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ быстроС слияниС. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ засорСниС истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° лишними ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ слияния.

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°

Если Π΄Π²Π΅ Π²Π΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Π°, Git Π½Π΅ смоТСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.Когда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ такая ситуация, ΠΎΠ½Π° останавливаСтся прямо ΠΏΠ΅Ρ€Π΅Π΄ фиксациСй слияния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

Π’Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ процСсса слияния Git являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс рСдактирования / этапа / фиксации для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² слияния. Когда Π²Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ с ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠΌ слияния, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git status ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ. НапримСр, Ссли ΠΎΠ±Π΅ Π²Π΅Ρ‚Π²ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π°Π·Π΄Π΅Π» hello.py , Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ:

  На Π³Π»Π°Π²Π½ΠΎΠΌ ΡƒΠ·Π»Π΅ Π²Π΅Ρ‚ΠΊΠΈ НСсвязанныС ΠΏΡƒΡ‚ΠΈ: (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "git add / rm... "Π² зависимости ΠΎΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ) ΠΎΠ±Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹: hello.py  

Как прСдставлСны ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹

Когда Git ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π²ΠΎ врСмя слияния, ΠΎΠ½ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ содСрТимоС Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚ ΠΎΠ±Π΅ стороны ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰Π΅Π³ΠΎ содСрТимого. Π­Ρ‚ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹: >>>>>>. ПолСзно ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ эти ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π²ΠΎ врСмя слияния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ, Π³Π΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹.

  Π²ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚, Π½Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠΌ >>>>>>> feature branch;  

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ содСрТимоС ΠΏΠ΅Ρ€Π΅Π΄ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠΌ ======= являСтся ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ Π²Π΅Ρ‚Π²ΡŒΡŽ, Π° Ρ‡Π°ΡΡ‚ΡŒ послС — ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅ΠΉ Π²Π΅Ρ‚Π²ΡŒΡŽ.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΠΉΡ‚ΠΈ ΠΈ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ слияниС ΠΏΠΎ своСму вкусу. Когда Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ слияниС, всС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ git add для ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Git, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ запускаСтС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ git commit , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ слияния. Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ ΠΆΠ΅ процСсс, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ фиксации ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ снимка, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π»Π΅Π³ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ своими собствСнными слияниями.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ слияния Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС трСхстороннСго слияния.ΠŸΡ€ΠΈ ускорСнном слиянии Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния.

Π‘Π²ΠΎΠ΄ΠΊΠ°

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ прСдставляСт собой ΠΎΠ±Π·ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git merge . БлияниС — Π²Π°ΠΆΠ½Ρ‹ΠΉ процСсс ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Git. ΠœΡ‹ обсудили Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΡƒ слияния ΠΈ различия ΠΌΠ΅ΠΆΠ΄Ρƒ слияниСм с ускорСнной ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΎΠΉ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ трСхсторонним истинным слияниСм. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

  1. БлияниС Git ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Π΅Π΄ΠΈΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².
  2. БущСствуСт Π΄Π²Π° основных способа слияния Git: ускорСнная ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠ° Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ трСхсторонняя
  3. Git ΠΌΠΎΠΆΠ΅Ρ‚ автоматичСски ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Ссли Π² ΠΎΠ±Π΅ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΡ… фиксации Π½Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π’ этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈ упомянуты Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Git, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: git branch , git pull ΠΈ git fetch . ΠŸΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ страницы для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

.

О ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… слияния Π½Π° GitHub

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ GitHub

  • ВсС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  • GitHub.com
    • Начиная

      • Быстрый старт

        • ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Git
        • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎ
        • Π€ΠΎΡ€ΠΊ Ρ€Π΅ΠΏΠΎ
        • Π‘Ρ‹Ρ‚ΡŒ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ
      • Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ GitHub

        • ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ GitHub
        • Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ выпусков Ρ€Π°Π½Π½Π΅Π³ΠΎ доступа с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ просмотром Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
        • Π’ΠΈΠΏΡ‹ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² GitHub
        • Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы ΠΎΠ± измСнСниях Π² ΠΏΠ»Π°Π½Π°Ρ… GitHub
        • GitHub CLI
        • GitHub Desktop
        • GitHub для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств
        • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° доступ Π½Π° GitHub
        • Глоссарий GitHub
        • Π¨ΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° ΠΏΠΎ Git
        • Π£Ρ‡Π΅Π±Π½Ρ‹Π΅ рСсурсы Git ΠΈ GitHub
      • РСгистрация Π½Π° GitHub

        • РСгистрация Π½ΠΎΠ²ΠΎΠΉ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи GitHub
        • ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ адрСса элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹
        • Настройка ΠΏΡ€ΠΎΠ±Π½ΠΎΠΉ вСрсии GitHub Enterprise Cloud
        • Настройка ΠΏΡ€ΠΎΠ±Π½ΠΎΠΉ вСрсии GitHub Enterprise Server
      • Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° GitHub

        • Поиск способов внСсти свой Π²ΠΊΠ»Π°Π΄ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ исходный ΠΊΠΎΠ΄ Π½Π° GitHub
        • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² со Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ°ΠΌΠΈ
        • БлСдуя Π·Π° людьми
      • ИспользованиС GitHub

        • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹
        • УстранСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ
        • ГорячиС клавиши

.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ стратСгии слияния Git

Когда Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, протСстирована ΠΈ Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ линию Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ваша ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠšΠ°ΠΊΠΎΠ²Ρ‹ ваши Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ стратСгии слияния? Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим возмоТности, Π° Π·Π°Ρ‚Π΅ΠΌ прСдоставим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Atlassian. НадСюсь, Π² ΠΊΠΎΠ½Ρ†Π΅ Ρƒ вас Π±ΡƒΠ΄ΡƒΡ‚ инструмСнты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вашСй ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

стратСгии слияния Git

БлияниС происходит ΠΏΡ€ΠΈ объСдинСнии Π΄Π²ΡƒΡ… Π²Π΅Ρ‚Π²Π΅ΠΉ.Git Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ Π΄Π²Π° (ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅) указатСля Π½Π° Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ ΠΈ попытаСтся Π½Π°ΠΉΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΎΠ±Ρ‰ΡƒΡŽ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ. Π’ Git Π΅ΡΡ‚ΡŒ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² поиска Π±Π°Π·ΠΎΠ²ΠΎΠΉ фиксации, эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «стратСгиями слияния». Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Git Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΎΠ±Ρ‰ΡƒΡŽ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, ΠΎΠ½ создаст Π½ΠΎΠ²ΡƒΡŽ Β«Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ слияния», которая ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ измСнСния ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² слияния. ВСхничСски фиксация слияния — это обычная фиксация, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ просто Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ фиксации.

git merge автоматичСски Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ слияния, Ссли явно Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ½ΠΎΠ΅.ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ git merge ΠΈ git pull ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -s (стратСгия). К ΠΎΠΏΡ†ΠΈΠΈ -s ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ имя ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ стратСгии слияния. Если Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ явно, Git Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ слияния Π½Π° основС прСдоставлСнных Π²Π΅Ρ‚ΠΎΠΊ. НиТС приводится список доступных стратСгий слияния.

РСкурсивный

  git merge -s рСкурсивная Π²Π΅Ρ‚ΠΊΠ° 2 Π²Π΅Ρ‚ΠΊΠ° 3  

ΠžΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ двумя Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ.РСкурсивный — это стратСгия слияния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ слиянии ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ слияния, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, Π½ΠΎ Π² настоящСС врСмя Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ. Π­Ρ‚ΠΎ стратСгия слияния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ слиянии ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ.

Π Π΅ΡˆΠΈΠΌΠΎΡΡ‚ΡŒ

  git merge -s resolve branch2 branch3  

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ Π³ΠΎΠ»ΠΎΠ²Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ трСхсторонний Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ слияния. Он пытаСтся Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ нСоднозначности пСрСкрСстного слияния ΠΈ считаСтся Π² Ρ†Π΅Π»ΠΎΠΌ бСзопасным ΠΈ быстрым.

Осьминог

  git merge -s octopus branch2 branch3 branch4 branchN  

БтратСгия слияния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π΄Π²ΡƒΡ… Π³ΠΎΠ»ΠΎΠ². Когда ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ, осьминог Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ автоматичСски. Если ΠΏΡ€ΠΈ слиянии Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, осьминог откаТСтся ΠΎΡ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ слияния. Он Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для объСдинСния вмСстС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Наши

  git merge -s наша Π²Π΅Ρ‚ΠΊΠ°2 Π²Π΅Ρ‚ΠΊΠ°3 Π²Π΅Ρ‚ΠΊΠ° N  

Наша стратСгия Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с нСсколькими N Ρ„ΠΈΠ»ΠΈΠ°Π»Π°ΠΌΠΈ.Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ слияния Π²Ρ‹Π²ΠΎΠ΄Π° всСгда Ρ€Π°Π²Π΅Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚Π²ΠΈ HEAD . Π’Π΅Ρ€ΠΌΠΈΠ½ «наш» ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅, фактичСски ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ всС измСнСния ΠΈΠ· всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Ρ‚Π²Π΅ΠΉ. Он ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования для объСдинСния истории ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… Π²Π΅Ρ‚Π²Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ΠŸΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΠΎ

  git merge -s subtree branchA branchB  

Π­Ρ‚ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ рСкурсивной стратСгии. ΠŸΡ€ΠΈ объСдинСнии A ΠΈ B, Ссли B являСтся Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ A, B сначала обновляСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡƒΡŽ структуру A. Π­Ρ‚ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ выполняСтся для ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° ΠΏΡ€Π΅Π΄ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ A ΠΈ B.

Ρ‚ΠΈΠΏΠΎΠ² стратСгий слияния Git

ЯвноС слияниС

Π―Π²Π½ΠΎΠ΅ слияниС — это Ρ‚ΠΈΠΏ слияния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. «Явная» Ρ‡Π°ΡΡ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ слияния. Π­Ρ‚ΠΎ измСняСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ фиксации ΠΈ явно ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π³Π΄Π΅ Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ слияниС. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ фиксации слияния Ρ‚Π°ΠΊΠΆΠ΅ явно проявляСтся Π² Ρ‚ΠΎΠΌ Ρ„Π°ΠΊΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ фиксации слияния. НСкоторыС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ·Π±Π΅Π³Π°ΡŽΡ‚ явных слияний, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ слияния Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Β«ΡˆΡƒΠΌΠ°Β» Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

нСявноС слияниС Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ быстроС слияниС

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

Бквош ΠΏΡ€ΠΈ слиянии, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π±Π΅Π· явного слияния

Π”Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ нСявного слияния — это сквош.Бквош ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²ΠΎ врСмя ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²ΠΊΠΈ. БлияниС сквоша Π±Π΅Ρ€Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ· Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΈΠ»ΠΈ сТимаСт ΠΈΡ… Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π—Π°Ρ‚Π΅ΠΌ эта фиксация добавляСтся ΠΊ HEAD Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ слияния. Бквош ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сохранСния «чистой истории» Π²ΠΎ врСмя слияния. ЦСлСвая Π²Π΅Ρ‚Π²ΡŒ слияния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ частых ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². ΠŸΡ€ΠΈ сТатии ΠΈ слиянии история фиксации Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… Π²Π΅Ρ‚Π²Π΅ΠΉ становится СдинствСнной сТатой «фиксациСй Π²Π΅Ρ‚ΠΊΠΈΒ». Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»Π΅Π·Π΅Π½ с Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ процСссами git , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²Π΅Ρ‚ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ стратСгии рСкурсивного слияния Git

«РСкурсивная» стратСгия, прСдставлСнная Π²Ρ‹ΡˆΠ΅, ΠΈΠΌΠ΅Π΅Ρ‚ собствСнноС подмноТСство Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

НС слСдуСт ΠΏΡƒΡ‚Π°Ρ‚ΡŒ со стратСгиСй слияния Ours. Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ автоматичСски Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Π³ΠΎ чисто, ΠΎΡ‚Π΄Π°Π² ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ «нашСй» вСрсии. ИзмСнСния Β«ΠΈΡ…Β» автоматичСски ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ, Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ.

ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ «нашСй» стратСгии. Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Β«ΠΈΡ…Β» ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ иностранному Π΄Π΅Ρ€Π΅Π²Ρƒ слияния Π² Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ².

Π­Ρ‚Π° опция Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ слияния Π½Π΅Π²Π°ΠΆΠ½Ρ‹Ρ… ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… строк. Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡ‹Π΅ Π²Π΅Ρ‚Π²ΠΈ сильно Ρ€Π°Π·ΠΎΡˆΠ»ΠΈΡΡŒ.

Π­Ρ‚Π° опция позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ явный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сравнСния. Π”ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ совмСстно с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git diff .

  ignore- * 

ignore-space-change
ignore-all-space
ignore-space-at-eol
ignore-cr-at-eol

Набор ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½Π°Ρ†Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π½Π° ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы.Π›ΡŽΠ±Π°Ρ строка, которая соотвСтствуСт подмноТСству ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π°.

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ запускаСт ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ для всСх Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² git-Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ трСхстороннСго слияния. Π­Ρ‚Π° опция ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для использования с ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ вСтвями с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ состояниями checkin / checkout .

ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π­Ρ‚ΠΎ отмСняСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ merge.renormalize .

Π­Ρ‚Π° опция ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π²ΠΎ врСмя слияния.

Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. РСкурсивноС слияниС ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ пСрСимСнования Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ n ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для прохоТдСния ΠΏΠΎΡ€ΠΎΠ³Π° схоТСсти пСрСимСнования. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ n Ρ€Π°Π²Π½ΠΎ 100%.

Π­Ρ‚Π° опция заимствована ΠΈΠ· стратСгии Β«ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΠΎΒ». Если стратСгия Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с двумя Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ ΠΈ измСняСт способ ΠΈΡ… сопоставлСния Π½Π° ΠΎΠ±Ρ‰Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΊΠ΅, этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ вмСсто этого Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΡƒΡ‚ΠΈ Π΄Π΅Ρ€Π΅Π²Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ совпадали.

Наша ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° слияния Git

Atlassian Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ использованиС явных слияний.ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΎΡ‡Π΅Π½ΡŒ проста: явноС слияниС обСспСчиваСт ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ контСкст для сливаСмых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ привСтствуСтся ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ локальной истории ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ для ΠΎΠ±Π·ΠΎΡ€Π°, Π½ΠΎ это Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ мСняСт ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ. Π­Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ.

.

git-merge (1)

merge.conflictStyle

Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ ΡΡ‚ΠΈΠ»ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π²
Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° ΠΏΡ€ΠΈ слиянии. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ «ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ», Ρ‡Ρ‚ΠΎ
ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° <<<<<<< , измСнСния, внСсСнныС ΠΎΠ΄Π½ΠΎΠΉ стороной,
ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ======= , измСнСния, внСсСнныС Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороной, Π° Π·Π°Ρ‚Π΅ΠΌ
ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ >>>>>>> .ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ, Β«diff3Β», добавляСт |||||||
ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ΠΈ исходный тСкст ΠΏΠ΅Ρ€Π΅Π΄ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠΌ ======= .

merge.defaultToUpstream

Если слияниС вызываСтся Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° фиксации, слияниС восходящСго ΠΏΠΎΡ‚ΠΎΠΊΠ°
Π²Π΅Ρ‚Π²ΠΈ, настроСнныС для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚Π²ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΡ… послСдниС
Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Π΅ значСния хранятся Π² ΠΈΡ… вСтвях ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ отслСТивания.
ЦСнности Π²Π΅Ρ‚Π²ΠΈ .<тСкущая Π²Π΅Ρ‚ΠΊΠ°> .merge , которая Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚
Ρ„ΠΈΠ»ΠΈΠ°Π»Ρ‹ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π½Π°Π·Π²Π°Π½Π½Ρ‹Π΅ Π²Π΅Ρ‚Π²ΡŒΡŽ . <тСкущая Π²Π΅Ρ‚ΠΊΠ°> .remote
Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ½ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ . .fetch
Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ отслСТивания, Π° совСты
эти Π²Π΅Ρ‚Π²ΠΈ отслСТивания ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ.

merge.ff

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Git Π½Π΅ создаСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ слияния ΠΏΡ€ΠΈ слиянии.
ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.ВмСсто этого
подсказка Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ пСрСсылаСтся Π²ΠΏΠ΅Ρ€Π΅Π΄. Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false ,
эта пСрСмСнная сообщаСт Git ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния Π² Ρ‚Π°ΠΊΠΎΠΌ
случай (эквивалСнт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --no-ff ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
линия). Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ , Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊΠΈΠ΅ слияния с быстрой ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΎΠΉ Π²ΠΏΠ΅Ρ€Π΅Π΄.
Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ (эквивалСнтно ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΎΠΏΡ†ΠΈΠΈ --ff-only ΠΈΠ·
командная строка).

ΡΠ»ΠΈΡ‚ΡŒ.verifySignatures

Если true, это эквивалСнтно ΠΊΠΎΠΌΠ°Π½Π΄Π΅ --verify-signatures.
Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π»ΠΈΠ½ΠΈΠΈ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. Git-merge (1).

merge.branchdesc

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ Π²Π΅Ρ‚ΠΎΠΊ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ сообщСниС ΠΆΡƒΡ€Π½Π°Π»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
тСкст описания Π²Π΅Ρ‚ΠΊΠΈ, связанный с Π½ΠΈΠΌΠΈ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
ΠΊ Π»ΠΎΠΆΠ½ΠΎΠΌΡƒ.

ΡΠ»ΠΈΡ‚ΡŒ.ΠΆΡƒΡ€Π½Π°Π»

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ Π²Π΅Ρ‚ΠΎΠΊ, Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ сообщСниС ΠΆΡƒΡ€Π½Π°Π»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
максимальноС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ количСство однострочных описаний ΠΈΠ·
фактичСскиС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ false, ΠΈ
истина являСтся синонимом 20.

merge.suppressDest

Π”ΠΎΠ±Π°Π²ΠΈΠ² глобус, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ этой ΠΌΠ½ΠΎΠ³ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ,
сообщСниС слияния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, вычислСнноС для слияния с этими
Π²Π΅Ρ‚Π²ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ "Π² <Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ>" ΠΈΠ·
Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ с пустым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для очистки списка
глобусов, Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… записСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.
Если пСрСмСнная merge.suppressDest Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°,
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ master ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

merge.renameLimit

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ пСрСимСнования
Π²ΠΎ врСмя слияния; Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
Ρ€Π°Π·Π½ΠΈΡ†Π°renameLimit. Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ дСйствуСт, Ссли ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ пСрСимСнования
Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½.

merge.renames

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ Git ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅. Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "false", ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅
Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½. Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«trueΒ», Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ пСрСимСнования.
По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ diff.renames.

merge.directoryRenames

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ Git ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², влияя Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π²
врСмя слияния с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ сторонС
история, ΠΊΠΎΠ³Π΄Π° этот ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ сторонС
история.Если для merge.directoryRenames установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "false", ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³
ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ пСрСимСнования ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Π½ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚
ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π² старом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "true", ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³
Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ пСрСимСнования, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Π½ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚
ΠΏΠ΅Ρ€Π΅Π΅Ρ…Π°Π» Π² Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Β», ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚
Π±ΡƒΠ΄Π΅Ρ‚ сообщСно для Ρ‚Π°ΠΊΠΈΡ… ΠΏΡƒΡ‚Π΅ΠΉ. Если merge.renames Π»ΠΎΠΆΠ½ΠΎ,
merge.directoryRenames игнорируСтся ΠΈ рассматриваСтся ΠΊΠ°ΠΊ false.По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
ΠΊ Β«ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΒ».

merge.renormalize

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚Π΅ Git, Ρ‡Ρ‚ΠΎ каноничСскоС прСдставлСниС Ρ„Π°ΠΉΠ»ΠΎΠ² Π²
Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ измСнился (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΠΎΠ»Π΅Π΅ ранняя фиксация записи
тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹ с ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ΠΌ строки CRLF, Π½ΠΎ послСдниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ строку LF
ΠΊΠΎΠ½Ρ†ΠΎΠ²ΠΊΠΈ). Π’ Ρ‚Π°ΠΊΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Git ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅
записаны Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ… Π² ΠΊΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ
ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹.Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ,
см. Ρ€Π°Π·Π΄Π΅Π» «ОбъСдинСниС Π²Π΅Ρ‚ΠΎΠΊ с Ρ€Π°Π·Π½ΠΎΠΉ рСгистрациСй / ΠΎΠΏΠ»Π°Ρ‚ΠΎΠΉ
Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Β»Π² gitattributes (5).

merge.stat

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π»ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ diffstat ΠΌΠ΅ΠΆΠ΄Ρƒ ORIG_HEAD ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ слияния
Π² ΠΊΠΎΠ½Ρ†Π΅ слияния. Π’Π΅Ρ€Π½ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

merge.autoStash

ΠŸΡ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ true автоматичСски ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ запись Π² Ρ‚Π°ΠΉΠ½ΠΈΠΊΠ΅.
Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ послС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
заканчиваСтся.Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ слияниС Π½Π° грязном Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²Π΅.
Однако ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ остороТно: послСднСС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠ½ΠΈΠΊΠ° послС
ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ слияниС ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ.
Π­Ρ‚Π° опция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ --no-autostash ΠΈ
--autostash Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² git-merge (1).
По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - false.

merge.tool

УправляСт Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ инструмСнт слияния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ git-mergetool (1).Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ спискС ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ встроСнныС значСния.
Π›ΡŽΠ±ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рассматриваСтся ΠΊΠ°ΠΊ настраиваСмый инструмСнт слияния ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚
Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ пСрСмСнная mergetool. .cmd.

merge.guitool

УправляСт Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ инструмСнт слияния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ git-mergetool (1), ΠΊΠΎΠ³Π΄Π°
-g / - ΡƒΠΊΠ°Π·Π°Π½ Ρ„Π»Π°Π³ gui. Π’ спискС Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ встроСнныС значСния.
Π›ΡŽΠ±ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рассматриваСтся ΠΊΠ°ΠΊ настраиваСмый инструмСнт слияния ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹
ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ mergetool.ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ .cmd ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°.

  • gvimdiff

  • gvimdiff2

  • gvimdiff3

  • nvimdiff

  • nvimdiff2

  • vimdiff2

  • vimdiff3

ΡΠ»ΠΈΡ‚ΡŒ.многословиС

УправляСт объСмом Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΌ рСкурсивным слияниСм
стратСгия. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ 0 Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚, ΠΊΡ€ΠΎΠΌΠ΅ послСднСй ошибки
сообщСниС, Ссли ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹. Волько Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹ уровня 1
ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, 2 Π²Ρ‹Ρ…ΠΎΠ΄Π°, ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈ измСнСния Ρ„Π°ΠΉΠ»ΠΎΠ². Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ 5 ΠΈ
Π²Ρ‹ΡˆΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ 2.
ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды GIT_MERGE_VERBOSITY .

слияниС. <Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€> .name

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ΅ имя для настраиваСмого Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ
Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ слияния. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. Gitattributes (5).

слияниС. <Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€> .driver

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΡƒΡŽ настраиваСмый Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ
Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ слияния. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. Gitattributes (5).

ΡΠ»ΠΈΡ‚ΡŒ.<Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€> .recursive

НазываСт Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ слияния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π°
Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ слияния ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΏΡ€Π΅Π΄ΠΊΠ°ΠΌΠΈ.
ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. Gitattributes (5).

Π²Π΅Ρ‚ΠΊΠ°. <имя> .mergeOptions

УстанавливаСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для слияния с Π²Π΅Ρ‚ΠΊΠΎΠΉ . Бинтаксис ΠΈ
ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρƒ git merge , Π½ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚
значСния, содСрТащиС символы ΠΏΡ€ΠΎΠ±Π΅Π»Π°, Π² настоящСС врСмя Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ.

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *