Π Π°Π·Π½ΠΎΠ΅

Git master merge: 35. БлияниС Π² Π²Π΅Ρ‚ΠΊΡƒ master

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

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ слияния ΠΈ пСрСбазирования | Atlassian Git Tutorial

Командой git rebase, словно опасной Ρ‚Π΅ΠΌΠ½ΠΎΠΉ ΠΌΠ°Π³ΠΈΠ΅ΠΉ, часто ΠΏΡƒΠ³Π°ΡŽΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ². Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Тизнь ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ проводится сравнСниС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git rebase со схоТСй ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git merge ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ситуации, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… умСстно Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² стандартный Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс Git.

ΠžΠ±Π·ΠΎΡ€ основных ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ²

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° git rebase ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° git merge. ОбС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ, Π½ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ это ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π°Ρ‡Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Π½ΠΎΠ²Ρ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, послС Ρ‡Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‡Π»Π΅Π½ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ добавляСт Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Π³Π»Π°Π²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ история Ρ„ΠΎΡ€ΠΊΠΎΠ², знакомая ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ, ΠΊΡ‚ΠΎ использовал Git для совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅. Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°: merge ΠΈΠ»ΠΈ rebase.

Бпособ слияния (merge)

ΠŸΡ€ΠΎΡ‰Π΅ всСго слияниС Π²Π΅Ρ‚ΠΊΠΈ master с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

gitΒ checkoutΒ feature
gitΒ mergeΒ master

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ этот ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΎΠ΄Π½Ρƒ строку:

gitΒ mergeΒ featureΒ master

Π­Ρ‚Π° опСрация создаСт Π² Π²Π΅Ρ‚ΠΊΠ΅ feature Π½ΠΎΠ²Ρ‹ΠΉ Β«ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния», ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ истории ΠΎΠ±Π΅ΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π²Π΅Ρ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

БлияниС (merge) β€” это отличная Π½Π΅Ρ€Π°Π·Ρ€ΡƒΡˆΠ°ΡŽΡ‰Π°Ρ опСрация. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Π­Ρ‚Π° опСрация позволяСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ rebase (ΠΈ описанных Π½ΠΈΠΆΠ΅).

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠ΅ измСнСния, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ внСшний ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния. Если Ρ€Π°Π±ΠΎΡ‚Π° Π² Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ вСдСтся Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ, история вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ быстро засорится. Π₯отя эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git log, Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ тяТСло Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Бпособ пСрСбазирования (rebase)

ВмСсто слияния ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ (feature) Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ (master) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄:

gitΒ checkoutΒ feature
gitΒ rebaseΒ master

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

Π“Π»Π°Π²Π½ΠΎΠ΅ прСимущСство rebase β€” Π±ΠΎΠ»Π΅Π΅ чистая история ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, эта ΠΊΠΎΠΌΠ°Π½Π΄Π° устраняСт Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ слияния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для git merge. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС Π²Ρ‹ΡˆΠ΅, ΠΊΠΎΠΌΠ°Π½Π΄Π° rebase создаСт ΠΈΠ΄Π΅Π°Π»ΡŒΠ½ΡƒΡŽ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° β€” Π²Ρ‹ смоТСтС ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π΄ΠΎ самого Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Ρ„ΠΎΡ€ΠΊΠΎΠ². Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΡŽ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠ°ΠΊ git log, git bisect ΠΈ gitk.

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

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

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

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ i ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git rebase:

gitΒ checkoutΒ feature
gitΒ rebaseΒ -iΒ master

ΠžΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ΡΡ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. Π’ Π½Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ пСрСчислСны всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ:

pickΒ 33d5b7aΒ MessageΒ forΒ commitΒ #1
pickΒ 9480b3dΒ MessageΒ forΒ commitΒ #2
pickΒ 5c67e61Β MessageΒ forΒ commitΒ #3

Π­Ρ‚ΠΎΡ‚ список Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ° послС пСрСбазирования. ИзмСняя ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ pick ΠΈ (ΠΈΠ»ΠΈ) порядок ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ΄Π°Ρ‚ΡŒ истории Π²Π΅Ρ‚ΠΊΠΈ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²ΠΈΠ΄. Π’Π°ΠΊ, Ссли Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ содСрТит исправлСниС нСбольшой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ fixup:

pickΒ 33d5b7aΒ MessageΒ forΒ commitΒ #1
fixupΒ 9480b3dΒ MessageΒ forΒ commitΒ #2
pickΒ 5c67e61Β MessageΒ forΒ commitΒ #3

Когда Π²Ρ‹ сохранитС ΠΈ Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚Π΅ Ρ„Π°ΠΉΠ», Git Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² соотвСтствии с вашими указаниями. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ быстрСС Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² истории Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ. Команда git merge просто Π½Π΅ Π² состоянии этого ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Π—ΠΎΠ»ΠΎΡ‚ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ пСрСбазирования

Π Π°Π·ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ с возмоТностями rebase, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π—ΠΎΠ»ΠΎΡ‚ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git rebase β€” Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π΅Ρ‚ΠΊΠ°Ρ….

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ rebase Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

ΠŸΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π²Π΅Ρ‚ΠΊΠΈ master Π² ΠΊΠΎΠ½Π΅Ρ† Π²Π΅Ρ‚ΠΊΠΈ feature. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² вашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с исходной Π²Π΅Ρ‚ΠΊΠΎΠΉ master. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ пСрСбазирования ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Git Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ история вашСй Π²Π΅Ρ‚ΠΊΠΈ master Ρ€Π°Π·ΠΎΡˆΠ»Π°ΡΡŒ с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

ЕдинствСнный способ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ Π³Π»Π°Π²Π½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ β€” Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ слияниС. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ слияния ΠΈ Π΄Π²ΡƒΠΌ Π½Π°Π±ΠΎΡ€Π°ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ измСнСния (исходныС измСнСния ΠΈ измСнСния ΠΈΠ· вашСй Π²Π΅Ρ‚ΠΊΠΈ послС rebase). НуТно Π»ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ситуация получится ΠΊΡ€Π°ΠΉΠ½Π΅ запутанная?

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git rebase слСдуСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π½Π΅ просматриваСт ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Если Π² Π½Π΅ΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ вСдСтся Ρ€Π°Π±ΠΎΡ‚Π°, ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚Π΅ Π»ΡŽΠ±Ρ‹Π΅ дСйствия ΠΈ ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ внСсти измСнСния Π½Π΅Ρ€Π°Π·Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠΌ способом (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git revert). Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ свободно ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΈ нСобходимости.

ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Git Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡƒΡŽ Π³Π»Π°Π²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° вступит Π² ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ с ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ. Но эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΎΡ€ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Ρ„Π»Π°Π³ --force:

# Π‘ΡƒΠ΄ΡŒΡ‚Π΅ ΠΊΡ€Π°ΠΉΠ½Π΅ остороТны с этой ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ! git push --force

ΠŸΡ€ΠΈ этом удалСнная главная Π²Π΅Ρ‚ΠΊΠ° станСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ΅ Π² вашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ послС rebase. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΈ ваши ΠΊΠΎΠ»Π»Π΅Π³ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Π΅Π³ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ.

Одна ΠΈΠ· Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΡ… ситуаций, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… форсированного помСщСния ΠΊΠΎΠ΄Π°, β€” это локальная очистка послС помСщСния частной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для создания Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ). Π­Ρ‚ΠΎ Ρ€Π°Π²Π½ΠΎΡ†Π΅Π½Π½ΠΎ заявлСнию: «Ой, я вСдь Π½Π΅ Ρ…ΠΎΡ‚Π΅Π» ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ. Π›ΡƒΡ‡ΡˆΠ΅ Π²ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽΒ». Π—Π΄Π΅ΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΈΠΊΡ‚ΠΎ послС ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½Π΅ Π½Π°Ρ‡Π°Π» Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ· исходной вСрсии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ.

ΠŸΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·Π±ΠΎΡ€ процСсса

ΠŸΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Git Ρ€ΠΎΠ²Π½ΠΎ Π² Ρ‚ΠΎΠΌ объСмС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ прСимущСствах пСрСбазирования Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… этапах Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°.

Π’ любом Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ процСссС с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git rebase сначала Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Π°Ρ структура Π²Π΅Ρ‚ΠΎΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для бСзопасного пСрСбазирования:

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ очистка

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

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

git checkout feature git rebase -i HEAD~3

Π£ΠΊΠ°Π·Π°Π² HEAD~3 Π² качСствС Π½ΠΎΠ²ΠΎΠ³ΠΎ полоТСния, Π²Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΡƒΡŽ, Π° лишь ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ пСрСписываСтС 3 ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠ΅ измСнСния Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

Если с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого способа Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ всю Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π½Π°ΠΉΡ‚ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° git merge-base. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ID ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ полоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git rebase:

git merge-base feature master

Π’Π°ΠΊΠΎΠ΅ использованиС ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ rebase ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ git rebase Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ увидят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ с простой ΠΈ отслСТиваСмой историСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ.

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для частных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ. Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, ΠΎΠ½Π° являСтся ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΅Π΅ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Π° очистки Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² с ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ использованиСм rebase с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git merge Π½Π΅ сущСствуСт.

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ восходящих ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ

Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠžΠ±Π·ΠΎΡ€ основных ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ²Β» Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΎΡΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ master Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git merge ΠΈΠ»ΠΈ git rebase. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ слияния ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ бСзопасно, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ этом сохраняСтся вся история рСпозитория. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ пСрСбазирования создаСтся линСйная структура: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‚ΠΊΠ° пСрСмСщаСтся Π² ΠΊΠΎΠ½Π΅Ρ† Π²Π΅Ρ‚ΠΊΠΈ master.

Π’ этом случаС ΠΊΠΎΠΌΠ°Π½Π΄Π° git rebase ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ локальная очистка (ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ), Π½ΠΎ ΠΏΡ€ΠΈ Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠ΅ измСнСния ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ master.

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ‰Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ rebase Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΎΡ‚ Π³Π»Π°Π²Π½ΠΎΠΉ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΈ совмСстной Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ ΠΎΠ΄Π½ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° трСбуСтся Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‡ΡƒΠΆΠΈΠ΅ измСнСния Π² ваш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

НапримСр, Ссли Π²Ρ‹ вмСстС с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Π”ΠΆΠΎΠ½ΠΎΠΌ добавляли ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Π²Π΅Ρ‚ΠΊΡƒ feature, Ρ‚ΠΎ послС получСния ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ feature ΠΈΠ· рСпозитория Π”ΠΆΠΎΠ½Π° ваш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π‘ Ρ‚Π°ΠΊΠΈΠΌ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ: Π»ΠΈΠ±ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ merge Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ для Π²Π΅Ρ‚ΠΊΠΈ john/feature, Π»ΠΈΠ±ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ rebase локальной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π²Π΅Ρ‚ΠΊΠΈ john/feature.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ Β«Π·ΠΎΠ»ΠΎΡ‚ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΒ», ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ вашСй Π²Π΅Ρ‚ΠΊΠΈ feature, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ. Π’ сущности, эта опСрация позволяСт лишь Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ваши измСнСния ΠΊ Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌ Π”ΠΆΠΎΠ½Π°. Π§Π°Ρ‰Π΅ всСго это ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ с ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ посрСдством ΠΊΠΎΠΌΠΌΠΈΡ‚Π° слияния.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π° git pull выполняСт слияниС. Однако Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ --rebase, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ запроса pull

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

ВсС измСнСния, сдСланныС Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git merge, Π° Π½Π΅ git rebase.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ являСтся очистка ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ rebase ΠΏΠ΅Ρ€Π΅Π΄ созданиСм ΠΏΡƒΠ»-рСквСста.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ПослС одобрСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΊΠΎΠ»Π»Π΅Π³ΠΎΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π΅ rebase Π² ΠΊΠΎΠ½Π΅Ρ† Π³Π»Π°Π²Π½ΠΎΠΉ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git merge для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π±Π°Π·Ρƒ ΠΊΠΎΠ΄Π°.

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

Если Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git rebase, всСгда ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ rebase Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, Ссли Π²Ρ‹ случайно Π·Π°ΠΏΡƒΡ‚Π°Π΅Ρ‚Π΅ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, всСгда ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π² ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ снова. НапримСр:

gitΒ checkoutΒ feature
gitΒ checkoutΒ -bΒ temporary-branch
gitΒ rebaseΒ -iΒ master
#Β [CleanΒ upΒ theΒ history]
gitΒ checkoutΒ master
gitΒ mergeΒ temporary-branch

РСзюмС

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ вас достаточно ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ rebase для своих Π²Π΅Ρ‚ΠΎΠΊ. Если Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‡ΠΈΡΡ‚ΡƒΡŽ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π±Π΅Π· Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² слияния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git rebase вмСсто git merge ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ.

Но Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ пСрСзаписи ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git merge. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ слияниС, Π½ΠΎ ΠΈ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ прСимущСства ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git rebase β€” ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° эффСктивны Π² Ρ€Π°Π±ΠΎΡ‚Π΅.

Π—Π°Ρ‡Π΅ΠΌ ΠΌΠ½Π΅ «master» Π² git merge origin/master?

БоглашСниС ΠΏΡ€ΠΈ использовании git ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ измСнСния ΠΎΡ‚ сСрвСра:

git fetch

git merge origin/master

Π― знаю, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ git pull, Π½ΠΎ ΠΌΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ вопрос касаСтся синтаксиса origin/master . Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ master ? Если я просто дСлаю git merge origin (Π±Π΅Π· master), это, каТСтся, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π― знаю, Ρ‡Ρ‚ΠΎ master -это Π²Π΅Ρ‚Π²ΡŒ, Π½ΠΎ Ссли я ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ ΠΏΡƒΠ»ΡŒΡ‚Π° дистанционного управлСния, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ использования merge для всСх Π½ΠΈΡ…?

git

merge

branch

git-merge

branching-and-merging

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ


Marc Stober Β  Β 

26 фСвраля 2014 Π² 21:22

2 ΠΎΡ‚Π²Π΅Ρ‚Π°


  • Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ origin/master Π² git ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с origin master?

    Π― Ρ…ΠΎΡ‚Π΅Π» Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ этот вопрос Π² качСствС коммСнтария ΠΊ ΠΎΡ‚Π²Π΅Ρ‚Ρƒ @KevinBallard здСсь What’s Ρ€Π°Π·Π½ΠΈΡ†Π° «origin master» ΠΏΡ€ΠΎΡ‚ΠΈΠ² «origin/master» , Π½ΠΎ ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π±Ρ‹Π» слишком Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΉ вопрос Ρ‚Π°ΠΊΠΎΠ²: Если я Π½Π°Ρ…ΠΎΠΆΡƒΡΡŒ Π² Π²Π΅Ρ‚ΠΊΠ΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ topic , ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ просто Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ…

  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с git pull master Π½Π΅ синхронизирована с origin master

    Π’ΠΎΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ шагов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»: ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΠ» ΠΌΠΎΠΈ измСнСния Π² отрасли, Ρ‡Ρ‚ΠΎΠ±Ρ‹ мСстный мастСр (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ фиксации(ΠΊΠΎΠΌΠΌΠΈΡ‚Π°) dc9afg2k ) git fetch origin master && git merge origin master git checkout master git pull (это вытянуло всС послСдниС измСнСния) git fetch origin. ..



4

Когда Π²Π΅Ρ‚Π²ΡŒ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π°, git merge origin Π±ΡƒΠ΄Π΅Ρ‚ merge Π² любой Π²Π΅Ρ‚Π²ΠΈ, установлСнной ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ с ΠΏΡƒΠ»ΡŒΡ‚Π° origin (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ master ). Π² Ρ‚Π°ΠΊΠΈΡ… случаях git merge origin ΠΈ git merge origin/master Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС. Однако Ссли Π±Ρ‹ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ merge Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ ΠΎΡ‚ origin, Π²Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ эту Π²Π΅Ρ‚Π²ΡŒ.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


mipadi Β  Β 

26 фСвраля 2014 Π² 22:03



4

АргумСнт(Ρ‹) ΠΊ merge Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ для фиксации(ΠΊΠΎΠΌΠΌΠΈΡ‚Π°)-IDs. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π² gitrevisions ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, origin/name Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· «remote branchs», Ρ‡Ρ‚ΠΎ git fetch ΠΈ git push Π΄Π΅Ρ€ΠΆΠ°Ρ‚ up-to-date Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ fetch-and-push.

«Π£Π΄Π°Π»Π΅Π½Π½Π°Ρ Π²Π΅Ρ‚Π²ΡŒ», Ρ‚Π°ΠΊΠΆΠ΅ называСмая «Π²Π΅Ρ‚Π²ΡŒΡŽ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ отслСТивания», — это просто вСтвСподобная ΠΌΠ΅Ρ‚ΠΊΠ°, Ρ‡Π΅ΠΉ «full name» начинаСтся с refs/remotes/ . ВсС Ρ‚Π΅, Ρ‡Ρ‚ΠΎ для ΠΏΡƒΠ»ΡŒΡ‚Π° дистанционного управлСния с ΠΈΠΌΠ΅Π½Π΅ΠΌ origin , находятся Π² refs/remotes/origin/ . ΠŸΡ€ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ git fetch обращаСтся ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, origin ) Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ git ΠΈ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ: «Π­ΠΉ, ΠΊΠ°ΠΊΠΈΠ΅ Ρƒ вас Ρ‚Π°ΠΌ Π²Π΅Ρ‚Π²ΠΈ ΠΈ ΠΊΠ°ΠΊΠΎΠ²Ρ‹ ΠΈΡ… значСния SHA-1?» Когда ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹, ΠΎΠ½ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΡ… локально, Π² вашСм Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ git: refs/remotes/origin/master , refs/remotes/origin/devel ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ это позволяСт Π²Π°ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ всС выглядСло «Ρ‚Π°ΠΌ», ΠΊΠΎΠ³Π΄Π° ваш git Π² послСдний Ρ€Π°Π· ΠΈΠΌΠ΅Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Π˜Ρ… Π½Π΅ слСдуСт ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ git Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ «tracking branches» (ΠΈΠ»ΠΈ «local tracking branches»). Local branches are labels whose «full name» начинаСтся с refs/heads/ . Они ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ «tracking», Ссли с Π½ΠΈΠΌΠΈ связана «upstream» информация. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΡΡ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ создании Π²Π΅Ρ‚Π²ΠΈβ€”ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это происходит для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚Π²Π΅ΠΉ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ «same» Π² качСствС ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… Π²Π΅Ρ‚Π²Π΅ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ master ΠΏΡ€ΠΎΡ‚ΠΈΠ² origin/master, — ΠΈΠ»ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ (ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ) Π΅Π΅ ΠΏΠΎΠ·ΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git branch --set-upstream-to .

ВсС ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ синтаксиса git pull : git pull origin master довольно отличаСтся ΠΈ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΡ‚Π°Ρ€ΡˆΠ΅, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡ ΠΈΠ΄Π΅Π΅ «remote-tracking branches». 1 Ρ‚Π°ΠΊΠΎΠ΅ случайноС сходство, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ каТСтся, являСтся источником большой ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ (я знаю, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ это сбивало мСня с Ρ‚ΠΎΠ»ΠΊΡƒ).


1 Π² частности, Π²Ρ‹ использовали (ΠΈ всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅) git pull ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ URL, Π° Π½Π΅ «remote». Π­Ρ‚ΠΎ пошло (ΠΈ всС Π΅Ρ‰Π΅ ΠΈΠ΄Π΅Ρ‚) Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ git, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ список, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅Π³ΠΎ Π²Π΅Ρ‚Π²Π΅ΠΉ (ΠΈΠ½ΠΎΠ³Π΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ интСрСс). Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π΅Π³ΠΎ Π²Π΅Ρ‚Π²ΠΈ, Π° Π½Π΅ ваши, ΠΎΠ½ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ FETCH_HEAD . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½ принСсСт master ΠΈΠ· «Ρ‚Π°ΠΌ», Π½ΠΎ помСстит Π΅Π³ΠΎ Π² FETCH_HEAD , Π° Π½Π΅ Π² Π²Π΅Ρ‚Π²ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ отслСТивания-с Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ URL Ρƒ вас Π½Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, поэтому Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ способа Π½Π°Π·Π²Π°Ρ‚ΡŒ Π²Π΅Ρ‚Π²ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ отслСТивания: Π½Π΅Ρ‚ origin , с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ прСфикс refs/remotes/origin . АргумСнт master для git-pull Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚: «ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· FETCH_HEAD , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΈΡ… Π²Π΅Ρ‚Π²ΡŒ master

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


torek Β  Β 

26 фСвраля 2014 Π² 23:39


ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ вопросы:

Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ git merge origin/master?

ПослС извлСчСния с ΠΏΡƒΠ»ΡŒΡ‚Π° дистанционного управлСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git fetch Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ git merge origin/master Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, Π΄Π΅Π»Π°Π΅Ρ‚ Π»ΠΈ эта ΠΊΠΎΠΌΠ°Π½Π΄Π° git commit ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ?…

git pull origin master Π½Π΅ обновляСт origin/master?

Богласно Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, git pull выполняСт git fetch , Π° Π·Π°Ρ‚Π΅ΠΌ git merge, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² этом случаС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ git pull origin master Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ git fetch origin master , Π²Π΅Ρ€Π½ΠΎ? Однако, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ,…

Π•ΡΡ‚ΡŒ Π»ΠΈ какая-Ρ‚ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ «git merge origin master» ΠΈ » git merge origin/master`?

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ git merge origin master ΠΈ git merge origin/master ? Π― случайно сдСлал git merge origin master . Если это Π½Π΅ Ρ‚Π°ΠΊ, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° для сброса этого…

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ origin/master Π² git ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с origin master?

Π― Ρ…ΠΎΡ‚Π΅Π» Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ этот вопрос Π² качСствС коммСнтария ΠΊ ΠΎΡ‚Π²Π΅Ρ‚Ρƒ @KevinBallard здСсь What’s Ρ€Π°Π·Π½ΠΈΡ†Π° «origin master» ΠΏΡ€ΠΎΡ‚ΠΈΠ² «origin/master» , Π½ΠΎ ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π±Ρ‹Π» слишком…

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с git pull master Π½Π΅ синхронизирована с origin master

Π’ΠΎΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ шагов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»: ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΠ» ΠΌΠΎΠΈ измСнСния Π² отрасли, Ρ‡Ρ‚ΠΎΠ±Ρ‹ мСстный мастСр (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ фиксации(ΠΊΠΎΠΌΠΌΠΈΡ‚Π°) dc9afg2k ) git fetch origin master && git merge…

Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ git merge origin/master ΠΈ git pull

Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π½Π°Π΄ мСстным Π²Π΅Ρ‚ΠΊΠΎΠΉ BDD-local ΠΈ Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ измСнСния ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ, ΠΈ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΌΠΈ тСстами, ΠΎΠ½ΠΈ…

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ git merge ΠœΠ°ΡΡ‚Π΅Ρ€ ΠΈ origin/master?

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git merge origin/master : javanoob@DELL:~/workspace/PROJECT_One$ git merge origin/master Updating d83ef9c. .dd520ea error: The following untracked working tree files…

git merge origin master Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

git status Он ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚: On branch master Your branch is behind ‘origin/master’ by 1 commit, and can be fast-forwarded. (use git pull to update your local branch) nothing to commit, working tree clean…

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ «git merge origin/master»» ΠΈ «git merge master»

Π£ мСня Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° я пытался ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свою Π²Π΅Ρ‚Π²ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ с мастСром , ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ , ΠΈ…

Как ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ git master, origin/master ΠΈ upstream master

На ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Π³Π΄Π΅ сСйчас находится master ΠΈ Π΅Π³ΠΎ 2 ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Π²Π΅Ρ‚Π²ΠΈ слСТСния. НСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ remotes/upstream/master ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ 2 вСтвями. Как ΠΌΠ½Π΅…

Git: ΠžΠΏΡ†ΠΈΠΈ слияния для ΠΊΠΎΠΌΠ°Π½Π΄ merge ΠΈ pull

Π’ Git для ΠΊΠΎΠΌΠ°Π½Π΄ merge ΠΈ pull ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ слияния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Основная опция -s <стратСгия> опрСдСляСт ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ слияния. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния:

  • resolve
  • recursive
  • octopus
  • ours
  • subtree

Π’Π°ΠΊ ΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡƒΡ‚ΠΎΡ‡Π½ΡΡŽΡ‰Π°Ρ опция -X<ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ>, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ значСния:

  • ours
  • theirs
  • subtree[=path]

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ стратСгия с ΠΈΠΌΠ΅Π½Π΅ΠΌ ours, ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ с ΠΈΠΌΠ΅Π½Π΅ΠΌ ours, ΠΈ это Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ!

Π’Ρ‹Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

The merge mechanism (git-merge and git-pull commands) allows the

backend merge strategies to be chosen with -s option. Some strategies

can also take their own options, which can be passed by giving

-X<option> arguments to git-merge and/or git-pull.

resolve

This can only resolve two heads (i.e. the current branch and

another branch you pulled from) using a 3-way merge algorithm. It

tries to carefully detect criss-cross merge ambiguities and is

considered generally safe and fast.

recursive

This can only resolve two heads using a 3-way merge algorithm. When

there is more than one common ancestor that can be used for 3-way

merge, it creates a merged tree of the common ancestors and uses

that as the reference tree for the 3-way merge. This has been

reported to result in fewer merge conflicts without causing

mis-merges by tests done on actual merge commits taken from Linux

2.6 kernel development history. Additionally this can detect and

handle merges involving renames. This is the default merge strategy

when pulling or merging one branch.

The recursive strategy can take the following options:

ours

This option forces conflicting hunks to be auto-resolved

cleanly by favoring our version. Changes from the other tree

that do not conflict with our side are reflected to the merge

result.

This should not be confused with the ours merge strategy, which

does not even look at what the other tree contains at all. It

discards everything the other tree did, declaring our history

contains all that happened in it.

theirs

This is opposite of ours.

subtree[=path]

This option is a more advanced form of subtree strategy, where

the strategy makes a guess on how two trees must be shifted to

match with each other when merging. Instead, the specified path

is prefixed (or stripped from the beginning) to make the shape

of two trees to match.

octopus

This resolves cases with more than two heads, but refuses to do a

complex merge that needs manual resolution. It is primarily meant

to be used for bundling topic branch heads together. This is the

default merge strategy when pulling or merging more than one

branch.

ours

This resolves any number of heads, but the resulting tree of the

merge is always that of the current branch head, effectively

ignoring all changes from all other branches. It is meant to be

used to supersede old development history of side branches. Note

that this is different from the -Xours option to the recursive

merge strategy.

subtree

This is a modified recursive strategy. When merging trees A and B,

if B corresponds to a subtree of A, B is first adjusted to match

the tree structure of A, instead of reading the trees at the same

level. This adjustment is also done to the common ancestor tree.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ стратСгиях слияния (Π½Π° русском) Ρ‚ΡƒΡ‚:

http://habrahabr.ru/post/195674/

БтратСгия resolve

БтратСгия resolve β€” классичСскоС трСхсторонСС слияниС (three-way merge). Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ трСхстороннСго слияния примСняСтся для Π΄Π²ΡƒΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ. Условно этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… шагов:

  1. поиск ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°,
  2. поиск Π±Π»ΠΎΠΊΠΎΠ², ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ²ΡˆΠΈΡ…ΡΡ Π² ΠΎΠ±Π΅ΠΈΡ… вСрсиях ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°,
  3. Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π±Π»ΠΎΠΊΠΈ, ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π±Π΅Π· измСнСния,
  4. Π±Π»ΠΎΠΊΠΈ, измСнившиСся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ², Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅,
  5. Π±Π»ΠΎΠΊΠΈ, измСнившиСся Π² ΠΎΠ±Π΅ΠΈΡ… вСрсиях, Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли измСнСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹, Π² ΠΈΠ½ΠΎΠΌ случаС ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ прСдоставляСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

Π­Ρ‚Π° стратСгия ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ нСдостаток: Π² качСствС ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ° Π΄Π²ΡƒΡ… Π²Π΅Ρ‚ΠΎΠΊ всСгда выбираСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Для случая ΠΈΠ· нашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° это Π½Π΅ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ смСло ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ git merge feature -s resolve, ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ:

master: A — B — C — D — (M)

\ /

feature: X — Y

Π—Π΄Π΅ΡΡŒ C β€” ΠΎΠ±Ρ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π΄Π²ΡƒΡ… Π²Π΅Ρ‚ΠΎΠΊ, Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ², ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ этому ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ, принимаСтся Π·Π° ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°. ΠΠ½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ измСнСния, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² Π²Π΅Ρ‚ΠΊΠ°Ρ… master ΠΈ feature со Π²Ρ€Π΅ΠΌΠ΅Π½ этого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, послС Ρ‡Π΅Π³ΠΎ для ΠΊΠΎΠΌΠΌΠΈΡ‚Π° (M) создаСтся новая вСрсия Π΄Π΅Ρ€Π΅Π²Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π² соотвСтствии с ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌΠΈ 4 ΠΈ 5 нашСго условного Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Π’ ΠΊΠ°ΠΊΠΎΠΌ ΠΆΠ΅ случаС проявляСтся нСдостаток стратСгии resolve? Он проявляСтся Π² Ρ‚ΠΎΠΌ случаС, Ссли для ΠΊΠΎΠΌΠΌΠΈΡ‚Π° (M) Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, послС Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ Π΅Ρ‰Π΅ Ρ€Π°Π· Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git merge feature -s resolve. Π’ этом случаС Π² качСствС ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ° снова Π±ΡƒΠ΄Π΅Ρ‚ использован ΠΊΠΎΠΌΠΌΠΈΡ‚ C, ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄ΡƒΡ‚ снова ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π½ΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π² нашСм Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π΅.

БтратСгия recursive

Данная стратСгия Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ стратСгии resolve. Она Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ трСхстороннСС слияниС, Π½ΠΎ Π² качСствС ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ, Π° Β«Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉΒ» ΠΏΡ€Π΅Π΄ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ конструируСтся ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ условному Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ:

  1. проводится поиск всСх ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ² Π½Π° ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°,
  2. ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ проводится слияниС ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ², Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ появляСтся Π½ΠΎΠ²Ρ‹ΠΉ Β«Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉΒ» ΠΏΡ€Π΅Π΄ΠΎΠΊ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ свСТиС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ высокий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ проявлСния ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ².

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этого дСйствия принимаСтся Π·Π° ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΈ проводится трСхсторонСС слияниС.

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ этой стратСгии позаимствуСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ Merge recursive strategy ΠΈΠ· Π±Π»ΠΎΠ³Π° Β«The plasticscm blogΒ»:

Π˜Ρ‚Π°ΠΊ, Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Π²Π΅Ρ‚ΠΊΠΈ: main ΠΈ task001. И Ρ‚Π°ΠΊ Π²Ρ‹ΡˆΠ»ΠΎ, Ρ‡Ρ‚ΠΎ наши Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π·Π½Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΠΊ Π² извращСниях: ΠΎΠ½ΠΈ слили ΠΊΠΎΠΌΠΌΠΈΡ‚ 15 ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ main с ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ 12 ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ task001, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ 16 с ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ 11. Когда Π½Π°ΠΌ понадобилось ΡΠ»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ, оказалось, Ρ‡Ρ‚ΠΎ поиск Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ° β€” Π΄Π΅Π»ΠΎ Π½Π΅Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΠ΅, Π½ΠΎ стратСгия recursive с Π΅Π΅ конструированиСм Β«Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎΒ» ΠΏΡ€Π΅Π΄ΠΊΠ° Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ:

БтратСгия recursive ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство ΠΎΠΏΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git-merge с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π° -X:

  • ours ΠΈ theirs
    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для автоматичСского Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ². Ours β€” ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Β«Π½Π°ΡˆΡƒΒ» Π²Π΅Ρ€ΡΠΈΡŽ, Π²Π΅Ρ€ΡΠΈΡŽ Β«dstΒ», theirs β€” ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Β«ΠΈΡ…Β» Π²Π΅Ρ€ΡΠΈΡŽ.
  • renormalize (no-renormalize)
    ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π»ΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΏΡ€ΠΈ слиянии Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строк.
  • diff-algorithm=[patience|minimal|histogram|myers], Π° Ρ‚Π°ΠΊ ΠΆΠ΅ опция patience
    Π’Ρ‹Π±ΠΎΡ€ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ².
    Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± этих опциях ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ git-diff. Если ΠΊΡ€Π°Ρ‚ΠΊΠΎ, свойства этих Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:
    default, myers β€” стандартный, ΠΆΠ°Π΄Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
    minimal β€” производится поиск ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя.
    patience β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Β«patience diffΒ». О Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρƒ Π°Π²Ρ‚ΠΎΡ€Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Π»ΠΈΠ±ΠΎ Π² сокращСнном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π½Π° SO.
    histogram β€” Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ patience с Ρ†Π΅Π»ΡŒΡŽ, описанной ΠΊΠ°ΠΊ Β«support low-occurrence common elementsΒ». Π‘ΠΊΠ°Π·Π°Ρ‚ΡŒ чСстно, я Π½Π΅ смог Π½Π°ΠΉΡ‚ΠΈ достаточно ясного ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° вопрос, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ случаи ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ΡΡ ΠΈ Π±ΡƒΠ΄Ρƒ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π΄, Ссли ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ этот ΠΎΡ‚Π²Π΅Ρ‚.
  • ignore-space-change, ignore-all-space, ignore-space-at-eol
    ΠšΠΎΡ€Π½ΠΈ этих ΠΎΠΏΡ†ΠΈΠΉ Π»Π΅ΠΆΠ°Ρ‚, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π² git-diff ΠΈ относятся ΠΊ Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΈ слиянии.
    ignore-space-change β€” ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ различия Π² количСствС ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ², ΠΈΠ΄ΡƒΡ‰ΠΈΡ… подряд, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² ΠΊΠΎΠ½Ρ†Π΅ строки,
    ignore-all-space β€” ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ сравнСнии,
    ignore-space-at-eol β€” ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ различия Π² ΠΏΡ€ΠΎΠ±Π΅Π»Π°Ρ… Π² ΠΊΠΎΠ½Ρ†Π΅ строки.
  • rename-threshold=<n>
    Данная опция Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΡ€ΠΎΠ³, ΠΏΠΎ достиТСнии ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Π½Π΅ Π½ΠΎΠ²Ρ‹ΠΌ, Π° ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ git-diff Π½Π΅ досчитался. НапримСр, -Xrename-threshold=90% ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ считаСтся Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΡ‚ 90% ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.
  • subtree[=<path>]
    Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ рСкурсивного слияния с этой ΠΎΠΏΡ†ΠΈΠ΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ стратСгии subtree, Π³Π΄Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ основываСтся Π½Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠ°ΠΊ Π΄Π΅Ρ€Π΅Π²ΡŒΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ слиянии. ВмСсто этого Π² этом случаС указываСтся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

БтратСгия octopus

Π­Ρ‚Π° стратСгия ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для слияниС Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π΄Π²ΡƒΡ… Π²Π΅Ρ‚ΠΎΠΊ. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉΡΡ Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ, соотвСтствСнно, большС Π΄Π²ΡƒΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ.

Данная стратСгия ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ². Π’ связи с этим ΠΏΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π· Π² слиянии ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ стратСгии octopus.

БтратСгия ours

НС слСдуСт ΠΏΡƒΡ‚Π°Ρ‚ΡŒ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ ours ΠΈ ΠΎΠΏΡ†ΠΈΡŽ ours стратСгии recursive.

Выполняя git merge -s ours obsolete, Π²Ρ‹ ΠΊΠ°ΠΊ Π±Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅: я Ρ…ΠΎΡ‡Ρƒ ΡΠ»ΠΈΡ‚ΡŒ истории Π²Π΅Ρ‚ΠΎΠΊ, Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ Π² Π²Π΅Ρ‚ΠΊΠ΅ obsolete. Иногда Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ вмСсто стратСгии ours ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

$ git checkout obsolete

$ git merge -s recursive -Xtheirs master

БтратСгия ours β€” Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ срСдство.

БтратСгия subtree

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ стратСгии возьмСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Π³Π»Π°Π²Ρ‹ БлияниС ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΊΠ½ΠΈΠ³ΠΈ Β«Pro GitΒ».

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½ΠΎΠ²Ρ‹Π΅ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, rack:

$ git remote add rack_remote [email protected]:schacon/rack.git

$ git fetch rack_remote

warning: no common commits

remote: Counting objects: 3184, done.

remote: Compressing objects: 100% (1465/1465), done.

remote: Total 3184 (delta 1952), reused 2770 (delta 1675)

Receiving objects: 100% (3184/3184), 677.42 KiB | 4 KiB/s, done.

Resolving deltas: 100% (1952/1952), done.

From [email protected]:schacon/rack

* [new branch] build -> rack_remote/build

* [new branch] master -> rack_remote/master

* [new branch] rack-0.4 -> rack_remote/rack-0.4

* [new branch] rack-0.9 -> rack_remote/rack-0.9

$ git checkout -b rack_branch rack_remote/master

Branch rack_branch set up to track remote branch refs/remotes/rack_remote/master.

Switched to a new branch «rack_branch»

Ясно, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‚ΠΊΠΈ master ΠΈ rack_branch ΠΈΠΌΠ΅ΡŽΡ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· rack_branch Π² master с использованиСм squash, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ засорСния истории Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ Π½Π°ΠΌ Ρ„Π°ΠΊΡ‚Π°ΠΌΠΈ:

$ git checkout master

$ git merge —squash -s subtree —no-commit rack_branch

Squash commit — not updating HEAD

Automatic merge went well; stopped before committing as requested

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° rack Ρƒ нас Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

Как ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ свою Π²Π΅Ρ‚ΠΊΡƒ послСдними измСнСниями с основной Π²Π΅Ρ‚ΠΊΠΈ

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° разрабатываСтся ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», создаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‚ΠΊΠ°, которая отвСтвляСтся ΠΎΡ‚ основной Π»ΠΈΠ½ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ — master ΠΈΠ»ΠΈ develop (ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ master). Однако, Ρ‡Π΅ΠΌ дольшС ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°Π΄ своСй Π²Π΅Ρ‚ΠΊΠΎΠΉ, Ρ‚Π΅ΠΌ большС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ слияниС (merge).

Когда ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅, Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ часто ΠΊΠΎΠ»Π»Π΅Π³ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ измСнСния Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ‚ΡΠ½ΡƒΡ‚ΡŒ послСдниС измСнСния, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ master ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ git pull.

Π₯ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ являСтся созданиС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°ΡˆΠΈΡ… Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… исправлСний. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ с основной Π»ΠΈΠ½ΠΈΠ΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ master ΠΈΠ»ΠΈ с ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π°Ρ‰Π΅.

Основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ сразу ΠΆΠ΅ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊ измСнСниям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ внСсли Π² основной ΠΊΠΎΠ΄ прилоТСния. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΈΠ·Π±Π΅ΠΆΠΈΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ слияния Π² ΠΊΠΎΠ½Ρ†Π΅, ΠΊΠΎΠ³Π΄Π° Π²Π΅Ρ‚ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°.

Для обновлСния своСго ΠΊΠΎΠ΄Π°, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚ΡΠ½ΡƒΡ‚ΡŒ всС измСнСния. Нам Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ синхронизированы ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹. Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ Π½Π° основной Π²Π΅Ρ‚ΠΊΠ΅ master, Π΄Π΅Π»Π°Π΅ΠΌ:

Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π° Π½Π°ΡˆΡƒ Π²Π΅Ρ‚ΠΊΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ для синхронизации с Π²Π΅Ρ‚ΠΊΠΎΠΉ master Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ возмоТности.

ΠΠ°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли это общая Π²Π΅Ρ‚ΠΊΠ°. Если ΠΌΡ‹ ΠΏΡƒΡˆΠ½Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ измСнСния Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ origin/master, Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ‚ΠΎΠΆΠ΅ смогут Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ этим ΠΆΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ.

Однако, Ссли эта Π²Π΅Ρ‚ΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ наша ΠΈ Π½Π°Π΄ Π½Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹, Ρ‚ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git rebase: Π²ΠΎΠ·ΡŒΠΌΡ‘Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈΠ· master ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ ΠΈΡ… ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² нашСй Π²Π΅Ρ‚ΠΊΠ΅.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ наша Π²Π΅Ρ‚ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ просто смСщСна Π²Π²Π΅Ρ€Ρ…, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ создали Π΅Ρ‘ ΠΈΠ· послСднСй вСрсии master Π²Π΅Ρ‚ΠΊΠΈ. Однако, это дСйствиС мСняСт id этих ΠΆΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ git rebase Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Ρƒ нас личная Π²Π΅Ρ‚ΠΊΠ° ΠΈ ΠΎΠ½Π° Π½Π΅ дСлится с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ.

Π”Π°Π²Π°ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ rebase.
Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ Π½Π° Π²Π΅Ρ‚ΠΊΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π΅Π»Π°Π΅ΠΌ git rebase с master.

Π§Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚? — ΠΏΠ΅Ρ€Π΅ΠΌΠ°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ HEAD ΠΈ замСняСт Π½Π°ΡˆΡƒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎΠ²Π΅Ρ€Ρ… master:

First, rewinding head to replay your work on top of it...
Applying:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наши ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ содСрТат всС послСдниС измСнСния, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ Π² master.

Git: ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ с мастСром

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

Π’ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… систСмах контроля вСрсий (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ CVS) ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ слияния ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π»Π°ΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ.Π”Ρ€ΡƒΠ³ΠΈΠ΅ соврСмСнныС, Π½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ систСмы контроля вСрсий, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Subversion, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, поэтому Π³ΠΈΠ±ΠΊΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ слияниСм Π½Π΅Ρ‚ΠΈΠΏΠΈΡ‡Π΅Π½.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс вСтвлСния Π² Git — это созданиС Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΊΠΎΠ΄Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, исправлСния ошибок ΠΈΠ»ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ. Они Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ вСтвями. КаТдая Π²Π΅Ρ‚Π²ΡŒ раздСляСт ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, относящиСся ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ новая функция Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ зафиксирован Π² Π²Π΅Ρ‚ΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ слиянию ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ основной строки ΠΊΠΎΠ΄Π° Π² зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса).

Команда git branch ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²Ρ‹Π²ΠΎΠ΄Π° списка всСх ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π—Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ° появится рядом с Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Π΅Ρ‚ΠΊΠΎΠΉ.

  $ Π²Π΅Ρ‚ΠΊΠ° git
* Π²Π»Π°Π΄Π΅Π»Π΅Ρ†
  

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git branch new-branch . Π­Ρ‚ΠΎ создаст Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ.

  $ git branch новая Π²Π΅Ρ‚ΠΊΠ°
$ git Π²Π΅Ρ‚ΠΊΠ°
* Π²Π»Π°Π΄Π΅Π»Π΅Ρ†
новая Π²Π΅Ρ‚ΠΊΠ°
  

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

На этом этапС ΠΌΡ‹ создали Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π½ΠΎ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ находимся Π² исходной Π²Π΅Ρ‚ΠΊΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ, Π½Π°ΠΌ сначала Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git checkout new-branch . Π­Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ Π½Π° Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

  $ git checkout новая Π²Π΅Ρ‚ΠΊΠ°
ΠŸΠ΅Ρ€Π΅ΡˆΠ΅Π» Π½Π° Π²Π΅Ρ‚ΠΊΡƒ «новая Π²Π΅Ρ‚ΠΊΠ°Β»
$ git Π²Π΅Ρ‚ΠΊΠ°
Π²Π»Π°Π΄Π΅Π»Π΅Ρ†
* новая Π²Π΅Ρ‚ΠΊΠ°
  

На этом этапС ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ функция Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, Π²Π΅Ρ‚Π²ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ снова объСдинСна с основной Π²Π΅Ρ‚Π²ΡŒΡŽ ΠΊΠΎΠ΄Π° (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ).

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ запускаСм git checkout master , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° master. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ запускаСм ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git merge new-branch , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с основной Π²Π΅Ρ‚ΠΊΠΎΠΉ.ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ git merge ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ. Π˜Ρ‚Π°ΠΊ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π² Π²Π΅Ρ‚ΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ соСдиняСм с ΠΈ .

  # ... Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ...

$ git add –A
$ git commit –m "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ фиксации"
$ git checkout master
ΠŸΠ΅Ρ€Π΅ΡˆΠ΅Π» Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master
$ git merge новая Π²Π΅Ρ‚ΠΊΠ°
  

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

Подводя ΠΈΡ‚ΠΎΠ³, Π²ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для создания Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ объСдинСния Π΅Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² мастСр:

  $ мастСр ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ git
$ git branch новая Π²Π΅Ρ‚ΠΊΠ°
$ git checkout новая Π²Π΅Ρ‚ΠΊΠ°

# . .. Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ...

$ git add –A
$ git commit –m "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ фиксации"
$ git checkout master
$ git merge новая Π²Π΅Ρ‚ΠΊΠ°
  
Об Π°Π²Ρ‚ΠΎΡ€Π΅

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π±Ρ‹Π»Π° написана Π―ΠΊΠΎΠ±ΠΎΠΌ Π‘Ρ‚ΠΎΠΏΠ°ΠΊΠΎΠΌ, ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚ΠΎΠΌ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌΡƒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, страстно ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ свою Тизнь с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ΄Π°.Π”ΠΆΠ΅ΠΉΠΊΠΎΠ± являСтся создатСлСм Initial Commit — сайта, ΠΏΡ€ΠΈΠ·Π²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ написаны ΠΈΡ… Π»ΡŽΠ±ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π•Π³ΠΎ ΠΈΠ·Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ людям ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Git Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠ΄Π°.

Git застрял Π½Π° мастСрС | ΠžΠ‘ΠͺΠ•Π”Π˜ΠΠ•ΠΠ˜Π•

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ @ Holger, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git merge --abort , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ слияниС. Однако, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π½Π΅ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ этого Π΄Π΅Π»Π°Ρ‚ΡŒ. БлияниС происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ( origin ) ΠΈΠΌΠ΅Π΅Ρ‚ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρƒ вас Π½Π΅Ρ‚ локально. Π’Π°ΡˆΠ° история ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

  * - * - A - B - C [мастСр, Π³Π°Ρ€ΠΌΠΈΡ‚ / мастСр]
       \
        D - E [происхоТдСниС / хозяин]
  

(ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ master == harmeet / master . Π― ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρƒ ΠΊ этому Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΈΠ½ΡƒΡ‚Ρƒ.)

Π•ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: слияниС, ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅.

ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ

Π‘Π°ΠΌΡ‹ΠΌ простым Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ просто Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ слияниС. Для этого Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π»ΡŽΠ±Ρ‹Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π² вашСм Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ git add. ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ с git commit . Π’ΠΎΠ³Π΄Π° ваша история Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

  * - * - A - B --- C [Π³Π°Ρ€ΠΌΠΈΡ‚ / мастСр]
       \ \
        \ F [мастСр]
         \ /
          D - E [происхоТдСниС / хозяин]
  

, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ git push origin master для обновлСния origin ΠΈ git push harmeet master для обновлСния harmeet .

Rebase

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, ΠΏΡ€Π΅Ρ€Π²ΠΈΡ‚Π΅ слияниС, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

  git pull --rebase
  

(Если Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΈΡ… ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅ с git rebase - ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ .)

Π’ΠΎΠ³Π΄Π° ваша история Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

  * - * - A - B - C [Π³Π°Ρ€ΠΌΠΈΡ‚ / мастСр]
       \
        D - E [происхоТдСниС / хозяин]
            \
             B '- C' [мастСр]
  

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ origin с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ:

  мастСр git push origin
  

ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ harmeet с:

  git push --force-with-lease мастСр harmeet
  

Π’ΠΎΠ³Π΄Π° ваша ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ история Π±ΡƒΠ΄Π΅Ρ‚:

  * - * - A - D - E - B '- C' [хозяин, происхоТдСниС / хозяин, harmeet / хозяин]
  

Force-ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅

Если Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· происхоТдСния , Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

  git push --force-with-lease origin master
  

, ΠΈ ваша история Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

  * - * - A - B - C [хозяин, Π³Π°Ρ€ΠΌΠΈΡ‚ / хозяин, происхоТдСниС / хозяин]
  

Если Git сообщаСт Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ harmeet / master ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½, Ρ‚ΠΎ ΠΎΠ½ находится Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ фиксации, Ρ‡Ρ‚ΠΎ ΠΈ ваш Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ master , Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Π½Π°ΠΆΠ°Π» Π½Π° harmeet / master с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° вашСй послСднСй Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ.

Если ваша Ρ†Π΅Π»ΡŒ — ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ измСнСния ΠΎΡ‚ origin (фиксируСт D ΠΈ E ) Π΄ΠΎ harmeet , Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅.

Каков Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ (ΠΈ самый бСзопасный) способ ΡΠ»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ Git с Π³Π»Π°Π²Π½ΠΎΠΉ?

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Ρ‹ΠΉ вопрос, Π½ΠΎ всС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π΅ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Ρ‹.

Нравится

  мастСр ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ git
git pull origin master
git merge test
git push origin master
  

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ :

  1. Π­Ρ‚ΠΎ нСбСзопасно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ тСстовой ΠΈ Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚Π²ΡŒΡŽ.

  2. Он «сТал» всС тСстовыС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² ΠΎΠ΄ΠΈΠ½ слитный ΠΊΠΎΠΌΠΌΠΈΡ‚ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΌ сСрвСрС; Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² основной Π²Π΅Ρ‚ΠΊΠ΅ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ всС ΠΆΡƒΡ€Π½Π°Π»Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ тСстовой Π²Π΅Ρ‚ΠΊΠΈ.

Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ git:

  git checkout test
ΠΌΠ΅Ρ€Π·Π°Π²Π΅Ρ† Ρ‚ΡΠ½ΡƒΡ‚ΡŒ
мастСр ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ git
ΠΌΠ΅Ρ€Π·Π°Π²Π΅Ρ† Ρ‚ΡΠ½ΡƒΡ‚ΡŒ
git merge --no-ff --no-commit test
  

ВСст слияниС Π΄ΠΎ фиксации , ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ быстрой фиксации Π²ΠΏΠ΅Ρ€Π΅Π΄ Π½Π° --no-ff ,

Если Π²ΠΎΠ·Π½ΠΈΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ git status , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ подробности ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ

  git статус
  

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈΠ»ΠΈ Ссли ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π½Π΅Ρ‚, ΠΌΡ‹ фиксируСм ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π½Π° Π½ΠΈΡ…

  git commit -m 'тСстовая Π²Π΅Ρ‚ΠΊΠ° слияния'
git push
  

Но Π² этом случаС Π±ΡƒΠ΄Π΅Ρ‚ потСряна история ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, записанная Π² тСстовой Π²Π΅Ρ‚ΠΊΠ΅, ΠΈ это Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π˜Ρ‚Π°ΠΊ, Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ rebase вмСсто merge (ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΊΠΎΠ³Π΄Π° Π·Π° это врСмя ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π²Π΅Ρ‚ΠΎΠΊ).

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΎΠ΄ΠΈΠ½ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ см. Http://git-scm.com/book/en/v2/Git-Branching-Rebasing

.

  мастСр ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ git
ΠΌΠ΅Ρ€Π·Π°Π²Π΅Ρ† Ρ‚ΡΠ½ΡƒΡ‚ΡŒ
git checkout test
ΠΌΠ΅Ρ€Π·Π°Π²Π΅Ρ† Ρ‚ΡΠ½ΡƒΡ‚ΡŒ
git rebase -i мастСр
мастСр ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ git
git merge test
  

Π”Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅, всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ тСстовой Π²Π΅Ρ‚ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² Π½Π°Ρ‡Π°Π»ΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ.ОсновноС прСимущСство пСрСбазирования Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ ΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡΡ‚ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ЕдинствСнноС, Ρ‡Π΅Π³ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ: Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ rebase Π² общСдоступной Π²Π΅Ρ‚ΠΊΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅.

Никогда Π½Π΅ выполняйтС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ :

  мастСр ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ git
git rebase -i test
  

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ информация для https://www. atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing

ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:

ΠœΠ°ΡΡ‚Π΅Ρ€ слияния Git Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ

Π£ вас Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ свою Π²Π΅Ρ‚ΠΊΡƒ Π½Π° master:

  git checkout feature1
git rebase master
  

УправляйтС всСми Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌΠΈ.Когда Π²Ρ‹ Π΄ΠΎΠΉΠ΄Π΅Ρ‚Π΅ Π΄ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² с исправлСниями (ΡƒΠΆΠ΅ Π² мастСрС), Git скаТСт, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (пропуская ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΡƒΠΆΠ΅ находящиСся Π² мастСрС) с

  git rebase --skip
  

Если Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git log Π² своСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ фиксация исправлСния ошибки появляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ Π² основной части.

Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ обсуТдСния ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ Git Π½Π° git rebase (https: // git-scm.com / docs / git-rebase), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования.

================ Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ контСкста ====================

Π­Ρ‚ΠΎΡ‚ ΠΎΡ‚Π²Π΅Ρ‚ Π±Ρ‹Π» прСдоставлСн ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π° вопрос, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ @theomega, с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π΅Π³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ситуации. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° эту Ρ‡Π°ΡΡ‚ΡŒ:

Π― Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ […] ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² ΠΌΠΎΠ΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΅Π³ΠΎ частной Π²Π΅Ρ‚ΠΊΠΈ Π½Π° master — это ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ даст Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Напротив, слияниС мастСра Π² Π΅Π³ΠΎ Π²Π΅Ρ‚ΠΊΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚, : Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ фиксации, которая Π½Π΅ связана с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ρ‡Π΅Ρ€Π΅Π· свою Π²Π΅Ρ‚ΠΊΡƒ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ вопроса, пропуститС фактичСскоС содСрТаниС ΠΈ контСкст вопроса, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΡΠ»Π΅ΠΏΡƒΡŽ ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚, прСдполагая, Ρ‡Ρ‚ΠΎ ΠΎΠ½ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ ΠΈΡ… (Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ) Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ использования, ΠΏΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ:

  • Ρ‚ΠΎΠ»ΡŒΠΊΠΎ частныС Π²Π΅Ρ‚ΠΊΠΈ (Ρ‚.Π΅. ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² вашСм локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌ). ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‰ΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ «ΡΠ»ΠΎΠΌΠ°Π΅Ρ‚» ΠΊΠΎΠΏΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… людСй.
  • , Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ (Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ главная ΠΈΠ»ΠΈ другая Π²Π΅Ρ‚ΠΊΠ°) Π² Π²Π΅Ρ‚ΠΊΡƒ, которая являСтся общСдоступной (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ ΠΏΠΎΠ΄Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈ Π²Π΅Ρ‚ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ запрос Π½Π° пСрСнос, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ с Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ, ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ свою Π²Π΅Ρ‚ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эти ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹), Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с git merge master , ΠΊΠ°ΠΊ Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ @Sven).
  • , Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ Π² свои Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ частныС Π²Π΅Ρ‚ΠΊΠΈ, Ссли это вашС ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Β«Ρ‡ΡƒΠΆΠΈΠΌΒ» ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌ Π² вашСй Π²Π΅Ρ‚ΠΊΠ΅.

НаконСц, Ссли Π²Ρ‹ Π½Π΅Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½Ρ‹ Ρ‚Π΅ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ этот ΠΎΡ‚Π²Π΅Ρ‚ Π½Π΅ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вашСй ситуации, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ Π±Ρ‹Π» для @theomega, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ коммСнтария Π½ΠΈΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ: я Π½Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽ, ΠΊΠ°ΠΊΠΎΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ @theomega.

Как бСзопасно ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ с мастСром Π² Git

НиТС приводится сообщСниС Π² гостСвом Π±Π»ΠΎΠ³Π΅, написанноС ΠšΠ°Ρ€Π»ΠΎΡΠΎΠΌ Π¨ΡƒΠ»ΡŒΡ†Π΅ΠΌ.

ВозмоТности Git для вСтвлСния ΠΈ слияния ΠΌΠΎΡ‰Π½Ρ‹Π΅, Π½ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ±ΠΈΠ²Π°Ρ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ². БСгодня ΠΌΡ‹ вносим свой Π²ΠΊΠ»Π°Π΄ Π² вашС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Git, отвСчая Π½Π° вопрос Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°: ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ Π² master ?

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ сразу ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ объяснСнию Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² Git, Π½ΠΎ сначала Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм шаг Π½Π°Π·Π°Π΄ ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… основах. ΠœΡ‹ объясним, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π²Π΅Ρ‚ΠΊΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠΎ-настоящСму ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, насколько Git отличаСтся ΠΎΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов VCS.Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ вСрнСмся ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ мноТСства способов слияния Π² Git.

Π”Π°Π²Π°ΠΉΡ‚Π΅ углубимся.

Git Merge Branch to Master ΠžΡΠ½ΠΎΠ²Ρ‹: Начиная с Π½Π°Ρ‡Π°Π»Π°

Π‘Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… слов, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с основ вСтвлСния ΠΈ слияния Git.

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π²Π΅Ρ‚Π²ΠΈ Π² Git?

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ссылок . ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Git ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ , , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ снимки Ρ‚ΠΎΡ‡ΠΊΠΈ Π² истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° своих ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠΎΠ² (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… родитСлями), ΠΈ ΠΈΠ· ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Git нСизмСняСмы. НапримСр, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² истории, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ для этого Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ссылки — это ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ прикрСпляСтС ΠΊ фиксации, ΠΈ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ссылки ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ссылки Π² Git являСтся Π²Π΅Ρ‚ΠΊΠ° .Когда Π²Ρ‹ создаСтС Π²Π΅Ρ‚ΠΊΡƒ ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ Π² истории, Git создаСт Π½ΠΎΠ²ΡƒΡŽ ссылку, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π½Π° этот ΠΊΠΎΠΌΠΌΠΈΡ‚. Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ваТная ссылка Π² Git называСтся HEAD. HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² истории ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, ΠΊΠ°ΠΊ git log , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ.

На рисункС Π½ΠΈΠΆΠ΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с трСмя ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ. HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π³Π»Π°Π²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ , которая Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ являСтся СдинствСнной доступной Π²Π΅Ρ‚ΠΊΠΎΠΉ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ создаСм Π²Π΅Ρ‚ΠΊΡƒ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ example , Π½ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π° Π½Π΅Π΅.Π’ΠΎΡ‚ ΠΊΠ°ΠΊ сСйчас выглядит нашС Ρ€Π΅ΠΏΠΎ:

Бсылка Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ — это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ простой тСкстовый Ρ„Π°ΠΉΠ», содСрТащий Ρ…Π΅Ρˆ фиксации, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ, поэтому созданиС Π²Π΅Ρ‚ΠΎΠΊ Π² Git происходит ΠΎΡ‡Π΅Π½ΡŒ быстро.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Git Merge?

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

Для этого ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° git merge . Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС измСнСния (Ρ‚. Π•. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹), сдСланныС Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, Π² Π²Π°ΡˆΡƒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ с Ρ‚ΠΎΡ‡ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Ρ€Π°Π·ΠΎΡˆΠ»ΠΈΡΡŒ.

Как ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΠΈΠ°Π»Ρ‹?

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, для объСдинСния Π²Π΅Ρ‚ΠΎΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git merge , Π½ΠΎ это Π½Π΅ СдинствСнный способ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ измСнСния ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠ°ΠΊ Π²Ρ‹ скоро ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ слияния Π² Π΅Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнной Ρ„ΠΎΡ€ΠΌΠ΅, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ — Π² нашСм случаС example — ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² Π²Π΅Ρ‚ΠΊΠ΅, которая ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ измСнСния. Π˜Ρ‚Π°ΠΊ, Π² сцСнарии Π½Π° рисункС, допустим, Π²Ρ‹ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² Π²Π΅Ρ‚Π²ΠΈ master , ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с master . Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это:

git checkout master # ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π³Π»Π°Π²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ
git merge example

Π’ нашСм сцСнарии ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎ ΠΈ master , Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, ΠΈ Git просто ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚: Β«Π£ΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ.”

Π’ΠΈΠΏΡ‹ слияний

Но Ρ‡Ρ‚ΠΎ, Ссли Π±Ρ‹ Π±Ρ‹Π»ΠΈ измСнСния для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ? Как Git ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ ΠΈΡ…? Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим это, ΡƒΠ·Π½Π°Π² ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… слияния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдоставляСт Git.

Fast-Forward Merge

Π‘Π°ΠΌΡ‹ΠΉ простой Ρ‚ΠΈΠΏ слияния Π² Git называСтся fast-forward . Git выполняСт этот Ρ‚ΠΈΠΏ слияния, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ исходная Π²Π΅Ρ‚ΠΊΠ° содСрТит Π½ΠΎΠ²Ρ‹Π΅ измСнСния с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° расхоТдСния. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ сцСнарий. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ послС создания Π²Π΅Ρ‚ΠΊΠΈ example ΠΌΡ‹ добавляСм Π² эту Π²Π΅Ρ‚ΠΊΡƒ ΠΏΠ°Ρ€Ρƒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выглядит Ρ‚Π°ΠΊ:

Π—Π°Ρ‚Π΅ΠΌ, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ вСрнСмся ΠΊ master ΠΈ попытаСмся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ слияниС ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄:

git switch master
git merge example

Git Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ слияниС ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ сообщСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° «быстрая ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠ° Π²ΠΏΠ΅Ρ€Π΅Π΄Β». Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄ΠΎ слияния Π²Π΅Ρ‚ΠΊΠ° master Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ Π·Π° Π²Π΅Ρ‚ΠΊΠΎΠΉ example . Π£ Π½Π΅Π³ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ собствСнных расходящихся ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².Π˜Ρ‚Π°ΠΊ, слияниС здСсь просто связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ master Π΄ΠΎΠ³Π½Π°Π» ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Π’ΠΎΡ‚ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ прСдставлСниС рСпозитория послС слияния:

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΏΡ€ΠΈ этом слиянии Git обновляСт содСрТимоС тСкстового Ρ„Π°ΠΉΠ»Π° для Π²Π΅Ρ‚ΠΊΠΈ master , замСняя Π΅Π³ΠΎ содСрТимоС Ρ…Π΅ΡˆΠ΅ΠΌ пятой фиксации. Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это нСслоТно, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ этот Ρ‚ΠΈΠΏ слияния ΠΎΡ‡Π΅Π½ΡŒ эффСктивным.

ВрСхстороннСС слияниС

Но Ρ‡Ρ‚ΠΎ, Ссли Π±Ρ‹ Π² Π΄Π²ΡƒΡ… направлСниях Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ Π½ΠΎΠ²Ρ‹Π΅ измСнСния? Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот сцСнарий, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ reset , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ фиксации, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько фиксаций с этой Ρ‚ΠΎΡ‡ΠΊΠΈ.

git reset --hard HEAD ~ 2
touch README.md
git add.
git commit -m "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» readme"

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Π΅ стороны Ρ€Π°Π·ΠΎΡˆΠ»ΠΈΡΡŒ, ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ выглядит Ρ‚Π°ΠΊ:

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

Π§Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ? ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π²Π΅ Π²Π΅Ρ‚Π²ΠΈ содСрТали ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹Π΅ измСнСния, ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠ° Π²ΠΏΠ΅Ρ€Π΅Π΄ Π±Ρ‹Π»Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°, поэтому Git Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» трСхстороннСС слияниС . Он называСтся «трСхстороннСС слияниС», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ для опрСдСлСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° слияния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊΠΈΠ΅ вСрсии ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Π° Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, Ссли Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ Π΅ΡΡ‚ΡŒ различия), Git Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² Ρ‚Ρ€Π΅Ρ… мСстах: Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅. Π΅ΡΡ‚ΡŒ, Π²Π΅Ρ‚ΠΊΠ°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠ»ΠΈΡ‚ΡŒΡΡ, ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ Ρ€Π°Π·ΠΎΡˆΠ»ΠΈΡΡŒ.

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° рисункС Π²Ρ‹ΡˆΠ΅, трСхстороннСС слияниС ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ фиксации с двумя Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ элСмСнтами вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Основная ссылка Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° эту Π½ΠΎΠ²ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, которая называСтся фиксациСй слияния ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для указания слияния ΠΈΠ· расходящихся историй.

Как ΠΌΠ½Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ Π² мастСр? НСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… совСтов

Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ слияниС с Π²Π΅Ρ‚ΠΊΠΎΠΉ master — это просто запуск git checkout master , Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт git merge .По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, это основы. Как ΠΈ ΠΊΠΎΠ³Π΄Π° это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ стратСгии вСтвлСния , ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ ваша ΠΊΠΎΠΌΠ°Π½Π΄Π°.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΏΠΎΠ΄Π²Π΅Π΄Π΅ΠΌ ΠΈΡ‚ΠΎΠ³ΠΈ, Π²ΠΎΡ‚ нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… совСтов ΠΏΠΎ слиянию, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ.

1. Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚Π²ΡŒΡŽ, Π½ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ»ΠΈ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ исходныС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. ВмСсто этого Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ всС измСнСния Π² ΠΎΠ΄Π½Ρƒ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ Π²Π°ΠΌΠΈ сообщСниСм.Для этого Π²Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ –squash ΠΏΡ€ΠΈ слиянии:

git checkout branch
git merge --squash

ПослС выполнСния этих ΠΊΠΎΠΌΠ°Π½Π΄, Ссли Π½Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ², Git Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ измСнСния ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΈ выполняСт ΠΈΡ… этапы, Π½ΠΎ останавливаСтся прямо ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… фиксациСй. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈ провСсти Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹.

ПослС фиксации Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ.Когда Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git branch -d , Git ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС:

error: Branch «» Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ объСдинСн.
Если Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, запуститС 'git branch -D '.

Git считаСт, Ρ‡Ρ‚ΠΎ Ρƒ вас Π½Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, Π½ΠΎ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ. Π£ вас просто Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ с Ρ…Π΅ΡˆΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отличаСтся ΠΎΡ‚ Ρ…ΡΡˆΠ° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² исходной Π²Π΅Ρ‚ΠΊΠ΅, ΠΈ это информация, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π»ΠΈ объСдинСна Π²Π΅Ρ‚ΠΊΠ°.ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ Π»ΡƒΡ‡ΡˆΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ, Π·Π°ΠΌΠ΅Π½ΠΈΠ² Β«-dΒ» Π½Π° Β«-DΒ» (с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ D), ΠΊΠ°ΠΊ совСтуСт сам Git.

2. ИспользованиС ΠΎΠΏΡ†ΠΈΠΈ Β«Π‘Π΅Π· фиксации»

ИспользованиС ΠΎΠΏΡ†ΠΈΠΈ –squash Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ большС контроля ΠΏΡ€ΠΈ слиянии. Однако это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ рСгулярной фиксации. Git Π΄Π°ΠΆΠ΅ Π΄ΡƒΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ измСнСния ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ прямо ΠΏΠ΅Ρ€Π΅Π΄ фиксациСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, Π½ΠΎ всС ΠΆΠ΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого происходила фиксация слияния, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ no-commit , ΠΊΠ°ΠΊ Π² git merge –no-commit < имя-Π²Π΅Ρ‚ΠΊΠΈ>.

Если всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Git сообщаСт:

АвтоматичСскоС слияниС ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ; остановлСн ΠΏΠ΅Ρ€Π΅Π΄ фиксациСй ΠΏΠΎ запросу.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ измСнСния, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹. Π Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ –no-squash , использованиС –no-commit ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ фиксации слияния.

3. ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ слиянии

Если Ρƒ вас Π΅ΡΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹ слияниСм, Git Π½Π΅ позволяСт Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ слияниС ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС:

Ошибка : ваши Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ пСрСзаписаны слияниСм:

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, зафиксируйтС свои измСнСния ΠΈΠ»ΠΈ сохранитС ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄ слияниСм.
ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅.

Π­Ρ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, прСдоставляСмый Git для прСдотвращСния ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Но Ρ‡Ρ‚ΠΎ, Ссли Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния? Π’ этом случаС ΠΏΠ΅Ρ€Π΅Π΄ объСдинСниСм Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git reset –hard . ΠžΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎ: Π² этом случаС ваши измСнСния исчСзнут навсСгда.

Π’Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ — это инструмСнт: Π½Π΅ злоупотрСбляйтС ΠΈΠΌ

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

ΠœΡ‹ Π½Π΅ рассмотрСли вопрос ΠΎ Ρ‚ΠΎΠΌ, слСдуСт Π»ΠΈ интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅. Часто ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ слишком Π²Π·Π²ΠΎΠ»Π½ΠΎΠ²Π°Π½Ρ‹ Ρ‚Π΅ΠΌ, насколько дСшСво Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ Π² Git, ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ стратСгии вСтвлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ слоТными, ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ ошибкам ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ .

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅: Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ — это инструмСнт. Как ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ инструмСнтом, ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ. Однако ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ это с ΡƒΠΌΠΎΠΌ, ΠΈ всС Π±ΡƒΠ΄Π΅Ρ‚ Π² порядкС.

Бпасибо Π·Π° ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π°!

ΠšΠ°Ρ€Π»ΠΎΡ являСтся Π°.NET с ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΊ для Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ для Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π° сСйчас ΠΎΠ½ ΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚ свои силы Π² мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. Он страстно Π»ΡŽΠ±ΠΈΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ чистый ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈ Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ΄Π°, автоматичСскоС тСстированиС ΠΈ нСпрСрывная сборка.

Как Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ слияния git

Git — это стандартный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ рСпозитория исходного ΠΊΠΎΠ΄Π° для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Git, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТноС, Π½ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ для Π΅Π³ΠΎ Ρ†Π΅Π»ΠΈ: Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ git-merge.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ git merge?

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

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ пСрСнСсти измСнСния ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git merge.БлияниС Π±Π΅Ρ€Π΅Ρ‚ всС измСнСния Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΈ примСняСт ΠΈΡ… ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ слияния?

Π’ любой ситуации, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ распараллСлСна, Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ. Иногда Π΄Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ строку ΠΊΠΎΠ΄Π° двумя Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами; Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Git Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, какая вСрсия ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ — это ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ.

Если это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²ΠΎ врСмя слияния git:

 

АвтоматичСскоС объСдинСниС [имя_Ρ„Π°ΠΉΠ»Π°1]
ΠšΠžΠΠ€Π›Π˜ΠšΠ’ (содСрТимоС): ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΡ€ΠΈ объСдинСнии Π² [имя_Ρ„Π°ΠΉΠ»Π°1]
АвтоматичСскоС объСдинСниС Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ; ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² слияния ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ ΠΈΠ»ΠΈ нСсколько Π΄Π½Π΅ΠΉ (Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²). РСкомСндуСтся, ΠΈ это Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° кодирования, ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ваш ΠΊΠΎΠ΄ нСсколько Ρ€Π°Π· Π² дСнь, часто ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ, наТимая, извлСкая ΠΈ объСдиняя.

Как Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ слияния git?

Git Π΄Π°Π΅Ρ‚ подсказку для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π² своСм сообщСнии ΠΎΠ± ошибкС. Он Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ слияния Π² [имя_Ρ„Π°ΠΉΠ»Π°1] , поэтому Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ с этим Ρ„Π°ΠΉΠ»ΠΎΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ устраняСт ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ фиксируСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ , поэтому, Ссли Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ инструкциям, ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, всС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° это Π² дСйствии.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²ΠΎΠ΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ», создайтС Π²Π΅Ρ‚ΠΊΡƒ, внСситС нСсколько ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ посмотритС, ΠΊΠ°ΠΊ это выглядит.

НачнитС с пустого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈ запуститС git init:

 

$ ls -l
$ git init
Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ пустой Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git Π² /home/bob/example/.git/
$

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создайтС Ρ„Π°ΠΉΠ» README ΠΈ зафиксируйтС измСнСния:

 

$ echo "Π­Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» README"> README.md
$ cat README.md
Π­Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» README
$ git add README.md
$ git commit -m "Π€Π°ΠΉΠ» README Π΄ΠΎΠ±Π°Π²Π»Π΅Π½"
1 Ρ„Π°ΠΉΠ» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, 1 вставка (+)
Ρ€Π΅ΠΆΠΈΠΌ создания 100644 README. md
$ git status
На мастСрС Π²Π΅Ρ‚ΠΊΠΈ
Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΎΡ‡ΠΈΡ‰Π΅Π½ΠΎ
$

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ:

 

$ git checkout -b "branch_to_create_merge_conflict"
ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ Π½Π° Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ 'branch_to_create_merge_conflict'

Π’ Π½ΠΎΠ²ΠΎΠΌ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠΈ:

 

$ git branch
* branch_to_create_merge_conflict
master

ВнСсти ΠΏΡ€Π°Π²ΠΊΡƒ:

 Π­Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» README 

Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΊΠ° Π² Π²Π΅Ρ‚ΠΊΠ΅

Π’Π΅ΠΏΠ΅Ρ€ΡŒ зафиксируйтС это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅:

 

$ vim README.md
$ git add README.md
$ git commit -m "ИзмСнСния, внСсСнныС Π² README Π² Π²Π΅Ρ‚ΠΊΠ΅"
[branch_to_create_merge_conflict 9c5e88a] ИзмСнСния, внСсСнныС Π² README Π² Π²Π΅Ρ‚ΠΊΠ΅
1 Ρ„Π°ΠΉΠ» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, 2 вставки (+)

Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ README Π² строкС 3 Ρ‡Π΅ΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈ зафиксируйтС это.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π³Π»Π°Π²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ:

 

$ git checkout master
ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master

ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ README:

 Π­Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» README 

Π­Ρ‚ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅

ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅:

 

$ git add README. md
$ git commit -m "ИзмСнСния, внСсСнныС Π² README Π² Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅"
[master 7ea2985] ИзмСнСния, внСсСнныС Π² README Π² Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅
1 Ρ„Π°ΠΉΠ» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, 2 вставки (+)

ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ с мастСром, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

 

$ git branch
branch_to_create_merge_conflict
* master
$ git merge branch_to_create_merge_conflict
АвтоматичСскоС слияниС README.md
CONFLICT (ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚): ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ слияния Π² README.md
Ошибка автоматичСского слияния; ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² Ρ„Π°ΠΉΠ» README, ΠΊΠ°ΠΊ просит Git, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ выглядит:

 Π­Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» README 

<<<<<<< HEAD
Π­Ρ‚ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅
=======
Π­Ρ‚ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π²Π΅Ρ‚ΠΊΠ΅
>>>>>>> branch_to_create_merge_conflict

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Git Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ синтаксис, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ сСмь символов «мСньшС», <<<<<<< ΠΈ сСмь символов «большС», >>>>>>> , Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сСмью Π·Π½Π°ΠΊΠ°ΠΌΠΈ равСнства. , ======= .Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ быстро Π½Π°ΠΉΡ‚ΠΈ, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ внСсти ΠΏΡ€Π°Π²ΠΊΠΈ.

Π’ этом Π±Π»ΠΎΠΊΠ΅ Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π΄Π΅Π»Π°:

  • Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ «мСньшС» ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ измСнСния Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Β«HEADΒ», Ρ‡Ρ‚ΠΎ являСтся Π΄Ρ€ΡƒΠ³ΠΈΠΌ словом для вашСй Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ), Π° Π·Π½Π°ΠΊΠΈ равСнства ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΊΠΎΠ½Π΅Ρ† ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°.
  • Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·Π΄Π΅Π» — это ΠΏΡ€Π°Π²ΠΊΠΈ, сдСланныС ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ слияния; ΠΎΠ½ начинаСтся со Π·Π½Π°ΠΊΠΎΠ² равСнства ΠΈ заканчиваСтся Π·Π½Π°ΠΊΠ°ΠΌΠΈ «большС».

Как Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π²Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ остаСтся, Π° Ρ‡Ρ‚ΠΎ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚. ВнСситС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния ΠΈ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»:

.

 Π­Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» README 

Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΊΠ° Π² Π²Π΅Ρ‚ΠΊΠ΅

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, это сохраняСт ΠΏΡ€Π°Π²ΠΊΠΈ Π²Π΅Ρ‚ΠΊΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ git status, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ дальнСйшиС инструкции:

 $ vim README.md 
$ git status
На мастСрС Ρ„ΠΈΠ»ΠΈΠ°Π»Π°
Π£ вас Π΅ΡΡ‚ΡŒ нСсвязанныС ΠΏΡƒΡ‚ΠΈ.
(устранитС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈ запуститС "git commit")
(ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«git merge --abortΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ слияниС)

НСсвязанныС ΠΏΡƒΡ‚ΠΈ:
(ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«git add. .. "для обозначСния Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ)
ΠΎΠ±Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹: README.md
Π² Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅" git add "ΠΈ / ΠΈΠ»ΠΈ" git commit -a ")

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ссли Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ слияниС, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git merge —abort , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ слияниС.

Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ инструкциям, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

 $ git add README.md 
$ git status
На мастСрС Ρ„ΠΈΠ»ΠΈΠ°Π»Π°
ВсС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ устранСны, Π½ΠΎ Π²Ρ‹ всС Π΅Ρ‰Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚Π΅ΡΡŒ.
(ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«git commitΒ» для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ слияния)

ИзмСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ: README.md

$ git commit
[master 9937ca4] БлияниС Π²Π΅Ρ‚ΠΊΠΈ 'branch_to_create_merge_conflict'

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ слияния Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… любого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ссли Ρƒ Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ достаточно Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΈΡ… с ясной Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ. Как Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, я Π±Ρ‹Π» ΠΎΡ‡Π΅Π½ΡŒ ошСломлСн, ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ²ΡˆΠΈΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° слияния Π±ΠΎΠ»Π΅Π΅ 10 Ρ„Π°ΠΉΠ»ΠΎΠ². ПониманиС Ρ‚ΠΎΠ³ΠΎ, Π½Π° Ρ‡Ρ‚ΠΎ Π²Ρ‹ смотритС, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ слияния, ΠΈΠΌΠ΅Π΅Ρ‚ большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

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

Π’Π΅Π±-сайт ΠΈ докумСнтация

Git — Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ рСсурсы, Ссли Π²Ρ‹ застряли. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ слиянии Git, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² слияния, Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ слияния ΠΊΠ½ΠΈΠ³ΠΈ Git Pro .

ПолноС руководство ΠΏΠΎ Git Merge ΠΈ Git Rebase

Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² нашС ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ git merge ΠΈ git rebase .Π­Ρ‚ΠΎ руководство Π½Π°ΡƒΡ‡ΠΈΡ‚ вас всСму, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± объСдинСнии Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ с Git.

Git Merge

Команда git merge ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ Π»ΡŽΠ±Ρ‹Π΅ измСнСния, внСсСнныС Π² Π±Π°Π·Ρƒ ΠΊΠΎΠ΄Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, Π² Π²Π°ΡˆΡƒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ ΠΊΠ°ΠΊ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ.

Бинтаксис ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

  git merge ИМЯ Π’Π•Π’ΠšΠ˜  

НапримСр, Ссли Π²Ρ‹ Π² настоящСС врСмя Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² Π²Π΅Ρ‚ΠΊΠ΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ dev ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π½ΠΎΠ²Ρ‹Π΅ измСнСния, внСсСнныС Π² Π²Π΅Ρ‚ΠΊΡƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ new-features , Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ввСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

  git merge new-features  

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π² вашСй Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ нСзафиксированныС измСнСния, Git Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ слияниС Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° всС измСнСния Π² вашСй Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅ зафиксированы.Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ эти измСнСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅:

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния

  git checkout -b new-branch-name
git add.
git commit -m "<вашС сообщСниС ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅>"  

Π£Π±Ρ€Π°Ρ‚ΡŒ ΠΈΡ…

  git stash # Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² Ρ‚Π°ΠΉΠ½ΠΈΠΊ
git merge new-features # сдСлайтС своС слияниС
git stash pop # Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ измСнСния Π² вашС Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ  

ΠžΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

  git reset --hard # удаляСт всС ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ измСнСния  

Git Rebase

ΠŸΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ Π² Git — это способ пСрСмСщСния всю Π²Π΅Ρ‚ΠΊΡƒ Π΄ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄Π΅Ρ€Π΅Π²Π°. Π‘Π°ΠΌΡ‹ΠΉ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ — ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π²Π΅Ρ‚Π²ΠΈ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ°, которая расходится с основной Π²Π΅Ρ‚ΠΊΠΎΠΉ Π² ​​точкС A:

  / o ----- o --- o - o ----- o --------- branch
--oo - A - o --- o --- o --- o ---- o - ooo --- master  

Когда Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  / o ----- o --- o - o ----- o ------ Ρ„ΠΈΠ»ΠΈΠ°Π»
--oo - A - o --- o --- o --- o ---- o - ooo master  

Для пСрСбазирования ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² вашСм главная Π²Π΅Ρ‚ΠΊΠ°.ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ git rebase master (Π³Π΄Π΅ master — Π²Π΅Ρ‚ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ).

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π΅Ρ‚ΠΊΠ°, которая Π±Ρ‹Π»Π° основана Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ (Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ), ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ:

  / --- o-o Π²Π΅Ρ‚ΠΊΠ°
           / --- ΠΎ-ΠΎ-ΠΎ-ΠΎ --- ΠΎ - ΠΎ ------ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ
---- o - ooA ---- o --- o - ooo - o - o- master  

ПослС git rebase master branch ΠΈΠ»ΠΈ git rebase master , ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ Π²Π΅Ρ‚ΠΊΠ°, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅:

  / --- oooo --- o - o ------ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ
---- o - o-o-A ---- o --- o - o-o-o - o - o- мастСр
                                  \ --- oo Π²Π΅Ρ‚ΠΊΠ°  

Git rebase ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π² консоли

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git rebase Π² консоли со списком ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ rebase:

  • Π’Π²Π΅Π΄ΠΈΡ‚Π΅ git rebase - i HEAD ~ 5 , Π³Π΄Π΅ послСднСС число — любоС количСство ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΎΡ‚ самых послСдних Π½Π°Π·Π°Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ.
  • Π’ vim Π½Π°ΠΆΠΌΠΈΡ‚Π΅ esc , Π·Π°Ρ‚Π΅ΠΌ i , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСста.
  • Π‘ Π»Π΅Π²ΠΎΠΉ стороны Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ pick с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ Π½ΠΈΠΆΠ΅. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΈ ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ сообщСниС фиксации, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ f вмСсто pick фиксации.
  • Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΅Π³ΠΎ.
  • Когда ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ остановлСно, внСситС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния, Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ git rebase --continue Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ.
  • Если ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свои измСнСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git push -f , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
  • Если Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ слияния, Π΅ΡΡ‚ΡŒ нСсколько способов ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, Π² Ρ‚ΠΎΠΌ числС слСдуя рСкомСндациям Π² этом руководствС. Один ΠΈΠ· способов — ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ части ΠΊΠΎΠ΄Π°. Π—Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ git add <имя Ρ„Π°ΠΉΠ»Π°> , Π° Π·Π°Ρ‚Π΅ΠΌ git rebase --continue . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, ввСдя git rebase --skip , ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, запустив git rebase --abort Π² консоли.
  pick 452b159 <сообщСниС для этого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°>
Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ 7fd4192 <сообщСниС для этого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°>
Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ c1af3e5 <сообщСниС для этого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°>
Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ 5f5e8d3 <сообщСниС для этого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°>
Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ 5186a9f <сообщСниС для этого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°>

# Rebase 0617e63..5186a9f Π½Π° 0617e63 (30 ΠΊΠΎΠΌΠ°Π½Π΄)
#
# ΠšΠΎΠΌΠ°Π½Π΄Ρ‹:
# p, pick = ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ
# r, reword = ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, Π½ΠΎ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС фиксации.
# e, edit = ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, Π½ΠΎ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ.
# s, squash = ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ фиксациСй ΠΈ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сообщСния фиксации.# f, fixup = ΠΊΠ°ΠΊ "squash", Π½ΠΎ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ сообщСниС ΠΆΡƒΡ€Π½Π°Π»Π° этой фиксации, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ останавливаСтся.
# x, exec = run ΠΊΠΎΠΌΠ°Π½Π΄Π° (ΠΎΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ строки) с использованиСм ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ
# d, drop = ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ
#
# Π­Ρ‚ΠΈ строки ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ; ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ свСрху Π²Π½ΠΈΠ·. 
#
# Если Π²Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ здСсь строчку, ЧВО COMMIT Π‘Π£Π”Π•Π’ УВЕРЯНЫ.
#
# Однако, Ссли Π²Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ всС, ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ.
#
# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ пустыС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹  

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

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ слияния — это ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Ρ€Π°Π·Π½Ρ‹Ρ… вСтвях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ строку ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠΌΠΈ способами.Если это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Git Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ„Π°ΠΉΠ»Π° ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² сообщСнии ΠΎΠ± ошибкС, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

  ΠšΠžΠΠ€Π›Π˜ΠšΠ’ (ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚): ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ слияния Π² resumΓ©.txt АвтоматичСскоС слияниС Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ; ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.  

Если Π²Ρ‹ посмотритС Ρ„Π°ΠΉΠ» resumΓ©.txt Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΠ΄Π°, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Π³Π΄Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚:

  <<<<<<< HEAD
АдрСс: 808 South Street.
=======
АдрСс: 505 North Street.
>>>>>>> updated_address  

Git Π΄ΠΎΠ±Π°Π²ΠΈΠ» нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… строк Π² Ρ„Π°ΠΉΠ»:

  • <<<<<<< HEAD
  • =======
  • >>> >>>> updated_address

Π”ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ ======= ΠΊΠ°ΠΊ ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°. ВсС ΠΌΠ΅ΠΆΠ΄Ρƒ <<<<<<< HEAD ΠΈ ======= - это содСрТимоС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ссылка HEAD. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, всС ΠΌΠ΅ΠΆΠ΄Ρƒ ======= ΠΈ >>>>>>> updated_address - это ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π² объСдиняСмой Π²Π΅Ρ‚ΠΊΠ΅, updated_address .

Git Merge vs Git Rebase

И git merge , ΠΈ git rebase - ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΈ ΠΎΠ΄Π½Π° Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.Однако ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹Π΅ различия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Π°ΠΌ ΠΈ вашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° запускаСтся git merge , создаСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² слияния ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±ΠΈΠ²Π°Ρ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Один ΠΈΠ· способов ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ фиксации слияния - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто этого git rebase .

git rebase - ΠΎΡ‡Π΅Π½ΡŒ мощная функция. ΠŸΡ€ΠΈ этом рискованно ΠΈ , Ссли Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

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

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