πŸ”€ ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ git merge ΠΈ git rebase: прСимущСства, нСдостатки ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ различия

Один ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… аспСктов Ρ€Π°Π±ΠΎΡ‚Ρ‹ с систСмой контроля вСрсий Git – пСрСнос ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Для этого сущСствуСт Π΄Π²Π° основных инструмСнта: git merge ΠΈ git rebase. Π₯отя ΠΎΠ½ΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, Π΄Π΅Π»Π°ΡŽΡ‚ ΠΎΠ½ΠΈ это Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами. РазбСрСмся, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ git merge ΠΈ git rebase, ΠΈ ΠΊΠ°ΠΊΡƒΡŽ ΠΎΠΏΡ†ΠΈΡŽ стоит Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ситуации.

Git Merge

Команда git merge прСдставляСт собой простой ΠΈ понятный способ объСдинСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ слияния (merge) Git создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ измСнСния ΠΈΠ· исходной Π²Π΅Ρ‚ΠΊΠΈ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ объСдинСниС Π²Π΅Ρ‚ΠΎΠΊ.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности git merge

  • НС пСрСписываСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. Команда сохраняСт Ρ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
  • Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚ связываСт истории ΠΎΠ±Π΅ΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ, дСлая ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ Ρ„Π°ΠΊΡ‚ ΠΈΡ… объСдинСния.
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° использования. Команда Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½ΠΈΠΉ Ρƒ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Π° Π² ситуациях, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ слияниС, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git checkout main
git merge feature

Π­Ρ‚ΠΎ создаст Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния Π² Π²Π΅Ρ‚ΠΊΠ΅ main, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ измСнСния ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ feature. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ Π²Π΅Ρ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

* c5b9a3e Merge branch 'feature'
|\
| * 7e9c8a2 Feature commit 2
| * 6b4c92e Feature commit 1
|/
* 345a6c7 Main commit 2
* a3b6c4d Main commit 1

Π—Π΄Π΅ΡΡŒ * прСдставляСт ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ измСнСния ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ feature Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ main.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° git merge

  • БохраняСт хронологичСский порядок ΠΈ Ρ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.
  • ИдСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для совмСстных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π³Π΄Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ контСкст ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

НСдостатки git merge

  • ΠœΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΠΉ истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², особСнно Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с частыми слияниями.
  • ΠœΠ½ΠΎΠ³ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ слияния ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, затрудняя Π΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΡŽ.

Git Rebase

Команда git rebase прСдставляСт собой Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ слиянию, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΡƒΡ‚Π΅ΠΌ пСрСмСщСния ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈΠ· исходной Π²Π΅Ρ‚ΠΊΠΈ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ истории, Π³Π΄Π΅ измСнСния ΠΈΠ· исходной Π²Π΅Ρ‚ΠΊΠΈ выглядят Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ нСпосрСдствСнно Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, rebase пСрСписываСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², создавая Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² исходной Π²Π΅Ρ‚ΠΊΠ΅.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности git rebase

  • ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ сдСланы нСпосрСдствСнно Π² Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅.
  • Π˜Π·Π±Π΅Π³Π°Π΅Ρ‚ создания Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². НС создаСт ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния, приводя ΠΊ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ истории.
  • Π‘Π»ΠΎΠΆΠ½Π΅Π΅, Ρ‡Π΅ΠΌ merge. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ понимания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Git.

Π§Ρ‚ΠΎΠ±Ρ‹ пСрСмСщСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git rebase Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

git checkout feature
git rebase main

Π­Ρ‚ΠΎ пСрСмСстит ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ feature Π² Π²Π΅Ρ‚ΠΊΡƒ main, создав Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ:

* e4bd7d3 Feature commit 2
* 21bb8c5 Feature commit 1
* 345a6c7 Main commit 2
* a3b6c4d Main commit 1

Π—Π΄Π΅ΡΡŒ * прСдставляСт Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, созданныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ rebase, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ измСнСния ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ feature ΠΊ ΠΊΠΎΠ΄Ρƒ Π²Π΅Ρ‚ΠΊΠΈ main.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° git rebase

  • ΠŸΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±ΠΎΠ»Π΅Π΅ чистой, Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², упрощая Π΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΡŽ.
  • НС создаСт ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ слияния, Ρ‡Ρ‚ΠΎ идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π²Π΅Ρ‚ΠΎΠΊ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ.

НСдостатки git rebase

  • Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ источником ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ для ΠΎΠ±Ρ‰ΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ.
  • Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ понимания ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Git. ΠŸΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам.

Git Merge ΠΈΠ»ΠΈ Git Rebase: Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ

Π’Ρ‹Π±ΠΎΡ€ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ git merge ΠΈΠ»ΠΈ git rebase зависит ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ². Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… – особСнности Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса, Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ поддСрТания Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git merge

Команда git merge ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для:

  • БовмСстных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΠ³Π΄Π° нСсколько Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ вмСстС ΠΈ часто ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ свои измСнСния. Команда git merge позволяСт ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, дСлая Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ всС внСсСнныС измСнСния ΠΈ ΠΈΡ… источники.
  • БохранСния истории Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Π³Π΄Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, git merge позволяСт ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΈ внСсСны измСнСния.
  • ΠžΠ±Ρ‰Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½Ρ‹Ρ… ΠΈ ΠΎΠ±Ρ‰ΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ – для Π²Π΅Ρ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ общСдоступными (Π² опСнсорсных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…) ΠΈ/ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСсколькими людьми, ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ слияния ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ‡Π΅Ρ‚ΠΊΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ rebase ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ΡŒ для понимания.

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git rebase

Команда git rebase Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для:

  • УпрощСния истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². ΠšΠΎΠΌΠ°Π½Π΄Ρƒ git rebase стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ слияниСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ для сохранСния Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ вСтвлСния истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², дСлая ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ ΠΈ понятной.
  • Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для бСзопасного пСрСписывания истории Π² Π²Π΅Ρ‚ΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π² ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π­Ρ‚ΠΎ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚ΠΊΠ°Ρ… Π±Π΅Π· риска ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².
  • ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ слиянию. Иногда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для устранСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² истории Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ с основной Π²Π΅Ρ‚ΠΊΠΎΠΉ Ρ‡Π΅Ρ€Π΅Π· слияниС. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя объСдинСниС ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ порядка ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ читаСмости истории.

Π—ΠΎΠ»ΠΎΡ‚ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ git rebase

ΠŸΡ€ΠΈ использовании ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git rebase Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π΅ пСрСбазирования: Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π΅Ρ‚ΠΊΠ°Ρ…. НСльзя ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ rebase ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π² ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° этого Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ rebase пСрСписываСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с Ρ‚ΠΎΠΉ ΠΆΠ΅ Π²Π΅Ρ‚ΠΊΠΎΠΉ.

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ git rebase, всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ΡΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, main), ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ вашСй Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ. Однако, Ссли Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ main, Git Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ история вашСй Π²Π΅Ρ‚ΠΊΠΈ main расходится с историСй ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСобходимости слияния Π΄Π²ΡƒΡ… Π²Π΅Ρ‚ΠΎΠΊ, Ρ‡Ρ‚ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ создаСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния ΠΈ Π΄Π²Π° Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², содСрТащих ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ измСнСния.

ПодвСдСм ΠΈΡ‚ΠΎΠ³ΠΈ

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ git merge ΠΈ git rebase ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° удобство отслСТивания ΠΈ управлСния историСй ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

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

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

***

ΠŸΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ использовалась публикация Git Merge vs. Rebase: Key Differences.

***
πŸ’» Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста»


Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
18 октября 2017

Π¨ΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° ΠΏΠΎ Git, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ прСдставлСны основныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

Git сСгодня - это ΠΎΡ‡Π΅Π½ΡŒ популярная систСма контроля вСрсий. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡˆΠΏΠ°Ρ€Π³Π°Π»...
admin
21 июня 2017

ΠŸΡ€ΠΎ Git, Github ΠΈ Gitflow простыми словами

НС самоС ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅Π΅, Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΡ…ΠΎΠ΄Ρ‡ΠΈΠ²ΠΎΠ΅ руководство ΠΏΠΎ Git, Gith...
admin
23 фСвраля 2017

Git Π·Π° полчаса: руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Π’ послСдниС Π³ΠΎΠ΄Ρ‹ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ git дСмонстрируСт Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠΉ рост. Π­Ρ‚Π° систСма ...