Skip to content

artemiosdev/ProGit-MyNotes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

62 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Pro Git

Scott Chacon, Ben Straub.

https://git-scm.com/book/ru/v2

Licence. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ распространяСтся ΠΏΠΎ свободной Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ Creative Commons Attribution- NonCommercial-ShareAlike 3.0. ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с тСкстом Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° сайтС https://creativecommons.org/licenses/by-nc-sa/3.0/deed.ru

image


К оглавлСнию

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ для ΠΎΠΏΡ†ΠΈΠΉ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git commit --a вмСсто git commit --amend. Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π΅Ρ… ΠΎΠΏΡ†ΠΈΠΉ, пСрвая Π±ΡƒΠΊΠ²Π° Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ являСтся Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ для Π΄Ρ€ΡƒΠ³ΠΈΡ…. ΠŸΡ€ΠΈ написании скриптов рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.

Настройка ΠΈ конфигурация

Π”Π²Π΅ довольно распространённыС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠ°ΠΊ сразу послС установки Git, Ρ‚Π°ΠΊ ΠΈ Π² повсСднСвной ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ для настройки ΠΈ получСния ΠΏΠΎΠΌΠΎΡ‰ΠΈ β€” это config ΠΈ help.

git config

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


ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ git config core.editor

Богласно инструкциям, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСно ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Emacs -> git config --global core.editor emacs

Vim -> git config --global core.editor "vim --nofork"


git help

Команда git help слуТит для отобраТСния встроСнной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Git ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ…. И хотя ΠΌΡ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ описания самых популярных ΠΊΠΎΠΌΠ°Π½Π΄ Π² этой Π³Π»Π°Π²Π΅, ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Ρ„Π»Π°Π³ΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ доступСн Ρ‡Π΅Ρ€Π΅Π· git help <command>.


ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ созданиС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π²

БущСствуСт Π΄Π²Π° способа ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ β€” ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ рСпозитория (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ сСти); Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.


git init

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π½Ρ‘ΠΌ, просто запуститС git init.


git clone

На самом Π΄Π΅Π»Π΅ git clone Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° Π½Π°Π΄ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ. Она создаёт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΈ выполняСт git init для создания пустого рСпозитория, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ½Π° добавляСт Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ (git remote add) для ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ URL (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ имя origin), выполняСт git fetch для этого рСпозитория ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² ваш Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ git checkout.

--bare, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ копию Git рСпозитория Π±Π΅Π· Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ.

--recursive Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСпозитория с подмодулями.


ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

ВсСго нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ Π½ΡƒΠΆΠ½ΠΎ для Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° использования Git для вСдСния истории ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

git add

Команда git add добавляСт содСрТимоС Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² индСкс (staging area) для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ git commit ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ лишь этот индСкс, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git add для сборки слСпка вашСго ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.


git status

Команда git status ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ состояния Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΈ индСксС: ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹, Π½ΠΎ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² индСкс; ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² индСксС. Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ этому выводятся подсказки ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ состояниС Ρ„Π°ΠΉΠ»ΠΎΠ².


git diff

Команда git diff ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для вычислСния Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΡŽΠ±Ρ‹ΠΌΠΈ двумя Git Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ вашСй Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ ΠΈ индСксом (собствСнно git diff), Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ индСксом ΠΈ послСдним ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ (git diff --staged), ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΡŽΠ±Ρ‹ΠΌΠΈ двумя ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ (git diff master branchB).

--check для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

git diff A...B ΠΊΠ°ΠΊ эффСктивно ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис.

-w для скрытия Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символах, ΠΊΠ°ΠΊ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния с опциями --theirs, --ours ΠΈ --base.

--submodule для сравнСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² подмодулях.


git difftool

Команда git difftool просто запускаСт внСшнюю ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ сравнСния для ΠΏΠΎΠΊΠ°Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ Π² Π΄Π²ΡƒΡ… Π΄Π΅Ρ€Π΅Π²ΡŒΡΡ…, Π½Π° случай Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ встроСнного просмотрщика git diff.


git commit

Команда git commit Π±Π΅Ρ€Ρ‘Ρ‚ всС Π΄Π°Π½Π½Ρ‹Π΅, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² индСкс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git add, ΠΈ сохраняСт ΠΈΡ… слСпок Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚ΠΎΡ‡ΠΊΠ° сохранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°), Π° Π·Π°Ρ‚Π΅ΠΌ сдвигаСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π½Π° этот слСпок. Π•ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ: -a для добавлСния всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² индСкс Π±Π΅Π· использования git add, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π² повсСднСвном использовании

-m для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСния ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π±Π΅Π· запуска ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°.

--amend для измСнСния послСднСго ΡΠΎΠ²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

-S ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ваши ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹


git reset

Команда git reset, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² основном для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Она измСняСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD ΠΈ, ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ, состояниС индСкса. Π’Π°ΠΊΠΆΠ΅ эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΡ€ΠΈ использовании ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --hard, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎΡΡ‚ΠΈ своих Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

git reset --hard Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ слияниС Π² ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ слияния, использованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git merge --abort для этих Ρ†Π΅Π»Π΅ΠΉ, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° Π½Π°Π΄ git reset.


git rm

Команда git rm ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Git для удалСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· индСкса ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ. Она ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° git add с Ρ‚Π΅ΠΌ лишь ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° удаляСт, Π° Π½Π΅ добавляСт Ρ„Π°ΠΉΠ»Ρ‹ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

--cached ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· индСкса

--ignore-unmatch ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ git filter-branch, которая подавляСт ошибки удалСния Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для автоматичСски выполняСмых скриптов).


git mv

Команда git mv β€” это ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ», Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git add для Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ git rm для старого.


git clean

Команда git clean ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для удалСния мусора ΠΈΠ· Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² слияний.


Π’Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ слияния

Π—Π° созданиС Π½ΠΎΠ²Ρ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ ΠΈ слияниС ΠΈΡ… Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ нСсколько Git ΠΊΠΎΠΌΠ°Π½Π΄.

git branch

Команда git branch β€” это своСго Ρ€ΠΎΠ΄Π° "ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π²Π΅Ρ‚ΠΎΠΊ". Она ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ваши Π²Π΅Ρ‚ΠΊΠΈ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ….

git branch -u для отслСТивания Π²Π΅Ρ‚ΠΎΠΊ.

git checkout

Команда git checkout ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Π΅Ρ‚ΠΎΠΊ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΡ… содСрТимого Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

--track для отслСТивания Π²Π΅Ρ‚ΠΎΠΊ.

--conflict=diff3 для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π·Π°Π½ΠΎΠ²ΠΎ, Π² случаС Ссли ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠ»ΠΎ ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ.


git merge

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

Π˜ΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ git merge <branch> с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ СдинствСнной Π²Π΅Ρ‚ΠΊΠΈ для слияния.

-Xignore-all-whitespace ΠΈ --abort, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ слияния Π² случаС возникновСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.


git mergetool

Команда git mergetool просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ внСшнюю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ слияний, Π² случаС Ссли Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ слияния.


git log

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

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π²ΠΎ всСх Π³Π»Π°Π²Π°Ρ… ΠΊΠ½ΠΈΠ³ΠΈ эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для дСмонстрации истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

-p ΠΈ --stat для получСния прСдставлСния ΠΎΠ± измСнСниях Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅.

--pretty ΠΈ --oneline для настройки Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π²Ρ‹Π²ΠΎΠ΄Π° этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ β€” Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ.

--decorate Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π²Π΅Ρ‚ΠΎΠΊ Π½Π° истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².

--graph Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π² Π²ΠΈΠ΄Π΅ Π΄Π΅Ρ€Π΅Π²Π°.

Бинтаксис branchA..branchB, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git log ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, Π½ΠΎ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Бинтаксис branchA... branchB ΠΈ ΠΎΠΏΡ†ΠΈΡŽ --left-right ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ находится Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, Π½ΠΎ Π½Π΅ Π² Π½ΠΈΡ… ΠΎΠ±Π΅ΠΈΡ… сразу.

--merge, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ².

--cc для просмотра ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² слияния Π² истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

-S ΠΈ -L для поиска событий Π² истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, истории развития ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ„ΠΈΡ‡ΠΈ.

--show-signature для отобраТСния строки Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ подписи для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² git log.


git stash

Команда git stash ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ сохранСния всСх нСзафиксированных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с Ρ†Π΅Π»ΡŒΡŽ очистки Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π±Π΅Π· нСобходимости Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅.


git tag

Команда git tag ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для задания постоянной ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π΅Π»ΠΈΠ·ΠΎΠ².


БовмСстная Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

НС Ρ‚Π°ΠΊ ΡƒΠΆ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ Π² Git Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ сСтСвого ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ для своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹, практичСски всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ с локальной ΠΊΠΎΠΏΠΈΠ΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Когда Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своими Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ, всСго нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ рСпозиториями.

git fetch

Команда git fetch связываСтся с ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ ΠΈ Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΠ· Π½Π΅Π³ΠΎ всС измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρƒ вас ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚ ΠΈ сохраняСт ΠΈΡ… локально.


git pull

Команда git pull Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ комбинация ΠΊΠΎΠΌΠ°Π½Π΄ git fetch ΠΈ git merge, Ρ‚. Π΅. Git Π²Π½Π°Ρ‡Π°Π»Π΅ Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ измСнСния ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория, Π° Π·Π°Ρ‚Π΅ΠΌ пытаСтся ΡΠ»ΠΈΡ‚ΡŒ ΠΈΡ… с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ.


git push

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

--delete для удалСния Π²Π΅Ρ‚ΠΎΠΊ Π½Π° сСрвСрС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ git push.

--recurse -submodules Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ всС ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° сСрвСр, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с рСпозиториями, содСрТащими ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.


git remote

Команда git remote слуТит для управлСния списком ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π². Она позволяСт ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ URL Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² Π² Π²ΠΈΠ΄Π΅ понятных ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… строк, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ origin, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ придётся Π½Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· для связи с сСрвСром. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ git remote ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ….

Π’ΠΈΠ΄: git remote add <имя> <URL>


git archive

Команда git archive ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π² Π°Ρ€Ρ…ΠΈΠ² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈΠ»ΠΈ всСго рСпозитория. ΠœΡ‹ использовали git archive для создания Ρ‚Π°Ρ€Π±ΠΎΠ»Π° (tar.gz Ρ„Π°ΠΉΠ»Π°) всСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠΎ сСти.


git submodule

Команда git submodule ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для управлСния Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ рСпозиториями. НапримСр, это ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² этом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ рСсурсы. Π£ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ submodule Π΅ΡΡ‚ΡŒ нСсколько ΠΏΠΎΠ΄-ΠΊΠΎΠΌΠ°Π½Π΄ β€” add, update, sync ΠΈ Π΄Ρ€. β€” для управлСния Ρ‚Π°ΠΊΠΈΠΌΠΈ рСпозиториями.


ΠžΡΠΌΠΎΡ‚Ρ€ ΠΈ сравнСниС

git show

Команда git show ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² простом ΠΈ чСловСкопонятном Π²ΠΈΠ΄Π΅. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для просмотра ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΌΠ΅Ρ‚ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅. Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° интСрСсная Π²Π΅Ρ‰ΡŒ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git show Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ слияниС Ρ„Π°ΠΉΠ»ΠΎΠ² β€” это ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ содСрТимого Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… стадиях Π²ΠΎ врСмя ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° слияния.


git shortlog

Команда git shortlog слуТит для подвСдСния ΠΈΡ‚ΠΎΠ³ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git log. Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ практичСски Ρ‚Π΅ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈ git log, Π½ΠΎ вмСсто простого листинга всСх ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ сгруппированы ΠΏΠΎ Π°Π²Ρ‚ΠΎΡ€Ρƒ.


git describe

Команда git describe ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚ (Π²Π΅Ρ‚ΠΊΡƒ, Ρ‚Π΅Π³) ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡƒΡŽ строку, которая Π½Π΅ измСнится Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ удобная, Π½ΠΎ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ, Π·Π°ΠΌΠ΅Π½Π° SHA-1. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git describe Π² Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° сборки ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Ρ€Π΅Π»ΠΈΠ·Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ для Π°Ρ€Ρ…ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° с Ρ€Π΅Π»ΠΈΠ·ΠΎΠΌ.


ΠžΡ‚Π»Π°Π΄ΠΊΠ°

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

git bisect

Команда git bisect β€” это полСзная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° для поиска ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ проявился Π±Π°Π³ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ автоматичСского Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска.


git blame

Команда git blame Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкой Ρ„Π°ΠΉΠ»Π° SHA-1 ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, послСдний Ρ€Π°Π· мСнявшСго эту строку ΠΈ Π°Π²Ρ‚ΠΎΡ€Π° этого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² поисках Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ вопросы ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΌ кускС ΠΊΠΎΠ΄Π°.


git grep

Команда git grep ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для поиска любой строки ΠΈΠ»ΠΈ рСгулярного выраТСния Π² любом ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π΄Π°ΠΆΠ΅ Π² Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… Π΅Π³ΠΎ вСрсиях.


ВнСсСниС исправлСний

НСкоторыС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Git ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… внСсённых ΠΈΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‚. Π΅. Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΊΠ°ΠΊ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ.

git cherry-pick

Команда git cherry-pick Π±Π΅Ρ€Ρ‘Ρ‚ измСнСния, вносимыС ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ, ΠΈ пытаСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π² Π²ΠΈΠ΄Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅. Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° Π² ситуации, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ°Ρ€ΠΎΡ‡ΠΊΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, Π° Π½Π΅ ΡΠ»ΠΈΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ со всСми внСсСнными Π² Π½Π΅Π΅ измСнСниями.


git rebase

Команда git rebase β€” это Β«Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΒ» cherry-pick. Он выполняСт Ρ‚Ρƒ ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π½ΠΎ для Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Ρ‚Π΅ΠΌ самым ΠΊΠ°ΠΊ Π±Ρ‹ пСрСнося Π²Π΅Ρ‚ΠΊΡƒ Π½Π° Π½ΠΎΠ²ΠΎΠ΅ мСсто.


git revert

Команда git revert β€” полная ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ git cherry-pick. Она создаёт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вносит измСнСния, ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ, ΠΏΠΎ сущСству отмСняя Π΅Π³ΠΎ. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния (merge commit).


Π Π°Π±ΠΎΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹

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

git apply

Команда git apply примСняСт ΠΏΠ°Ρ‚Ρ‡, сформированный с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git diff ΠΈΠ»ΠΈ GNU diff. Она Π΄Π΅Π»Π°Π΅Ρ‚ практичСски Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° patch.


git am

Команда git am ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для примСнСния ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ ΠΈΠ· входящих сообщСний элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹, Π² частности, Ρ‚Π΅Ρ… Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ mbox. Π­Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для простого получСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· email ΠΈ примСнСния ΠΈΡ… ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ.


git format-patch

Команда git format-patch ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Π½Π°Π±ΠΎΡ€Π° ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ mbox ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π² список рассылки.


git send-email

Команда git send-email ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для отсылки ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ, сформированных с использованиСм git format-patch, ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅.


git request-pull

Команда git request-pull ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ тСкста сообщСния для отсылки ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ. Если Ρƒ вас Π΅ΡΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ°, хранящаяся Π½Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΌ сСрвСрС, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΡ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π·Π°Π±Ρ€Π°Π» эти измСнСния Π±Π΅Π· трудностСй с отсылкой ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ Π΅Ρ‘ Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΎΠΌΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ.


Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ систСмы

Π’ Git Π΅ΡΡ‚ΡŒ нСсколько стандартных ΠΊΠΎΠΌΠ°Π½Π΄ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ систСмами контроля вСрсий.

git svn

Команда git svn ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сСрвСром Subversion. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Git Π² качСствС SVN ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π·Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ измСнСния ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ свои собствСнныС Π½Π° сСрвСр Subversion.


git fast-import

Для Π΄Ρ€ΡƒΠ³ΠΈΡ… систСм контроля вСрсий, Π»ΠΈΠ±ΠΎ для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git fast-import, которая ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, понятный Git.


АдминистрированиС

Если Π²Ρ‹ администрируСтС Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠ»ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ, Git прСдоставляСт нСсколько административных ΠΊΠΎΠΌΠ°Π½Π΄ Π²Π°ΠΌ Π² ΠΏΠΎΠΌΠΎΡ‰ΡŒ.

git gc

Команда git gc запускаСт сборщик мусора Π² вашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ удаляСт Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ эффСктивно ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Ρ„Π°ΠΉΠ»Ρ‹.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, эта ΠΊΠΎΠΌΠ°Π½Π΄Π° выполняСтся автоматичСски Π±Π΅Π· вашСго участия, Π½ΠΎ, Ссли ΠΏΠΎΠΆΠ΅Π»Π°Π΅Ρ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Ρ‘ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.


git fsck

Команда git fsck ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ наличия ошибок ΠΈ нСсоотвСтствий.


git reflog

Команда git reflog просматриваСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ измСнСния Π³ΠΎΠ»ΠΎΠ² Π²Π΅Ρ‚ΠΎΠΊ Π½Π° протяТСнии вашСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ для поиска ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ, пСрСписывая ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ.


git filter-branch

Команда git filter-branch ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для пСрСписывания содСрТимого ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ удалСния Ρ„Π°ΠΉΠ»Π° ΠΈΠ· истории ΠΈΠ»ΠΈ для вычлСнСния истории лишь части Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ для вынСсСния Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.



К оглавлСнию

БистСма контроля вСрсий β€” это систСма, Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ измСнСния Π² Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΏΠΎΠ·ΠΆΠ΅ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ вСрсии.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ систСмы контроля вСрсий ΡΡ‚Ρ€Π°Π΄Π°ΡŽΡ‚ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: ΠΊΠΎΠ³Π΄Π° вся история ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° хранится Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, Π²Ρ‹ рискуСтС ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ всё.

РаспрСдСлённыС систСмы контроля вСрсий. Π—Π΄Π΅ΡΡŒ Π² ΠΈΠ³Ρ€Ρƒ Π²ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ распрСдСлённыС систСмы контроля вСрсий (Π Π‘ΠšΠ’). Π’ Π Π‘ΠšΠ’ (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Git, Mercurial, Bazaar ΠΈΠ»ΠΈ Darcs) ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π½Π΅ просто ΡΠΊΠ°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ снимок всСх Ρ„Π°ΠΉΠ»ΠΎΠ² (состояниС Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ) β€” ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π’ этом случаС, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· сСрвСров, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ обмСнивались Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΡƒΠΌΡ€Ρ‘Ρ‚, любой клиСнтский Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скопирован Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ сСрвСр для продолТСния Ρ€Π°Π±ΠΎΡ‚Ρ‹. КаТдая копия рСпозитория являСтся ΠΏΠΎΠ»Π½Ρ‹ΠΌ бэкапом всСх Π΄Π°Π½Π½Ρ‹Ρ….

image

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ Git. Π’ 2005 Π³ΠΎΠ΄Ρƒ сообщСство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ядра Linux (Π° Π² частности Линус Π’ΠΎΡ€Π²Π°Π»ΡŒΠ΄Ρ β€” ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ Linux) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ.

image

Π‘VCS (Centralized Version Control System) β€” Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ систСмы контроля вСрсий, Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… основана Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° сСрвСрС имССтся ΠΎΠ΄Π½Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ копия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° программисты ΡΠΎΠ²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ свои измСнСния Π² этой Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ.

Π’ настоящСС врСмя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ (распрСдСлённыС) систСмы контроля вСрсий DVCS (Distributed Version Control System). Они ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠ½ΡƒΡŽ структуру ΠΈ ряд ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ. НапримСр, Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π΅ΡΡ‚ΡŒ свой Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр выступаСт Π² большСй стСпСни Π² качСствС Ρ…Π°Π±Π° для ΠΎΠ±ΠΌΠ΅Π½Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” Git.


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

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ Git ΠΊ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… большС ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π½Π°Π±ΠΎΡ€ снимков ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ сохраняСтС состояниС своСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Git, систСма Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ выглядит ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΈ сохраняСт ссылку Π½Π° этот снимок. Для увСличСния эффСктивности, Ссли Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹, Git Π½Π΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ эти Ρ„Π°ΠΉΠ»Ρ‹ вновь, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ создаёт ссылку Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ сохранён. Git прСдставляСт свои Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ, ΠΏΠΎΡ‚ΠΎΠΊ снимков.

image

image

Если Π²Ρ‹ Π² самолётС ΠΈΠ»ΠΈ Π² ΠΏΠΎΠ΅Π·Π΄Π΅ ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π²Ρ‹ смоТСтС ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ (Π² Π²Π°ΡˆΡƒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ копию): ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ сСти, всС измСнСния ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π’ Git для всСго вычисляСтся Ρ…Π΅Ρˆ-сумма, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ происходит сохранСниС. Π’ дальнСйшСм ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ сохранённым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ происходит ΠΏΠΎ этой Ρ…Π΅Ρˆ-суммС. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Git Π½Π΅ ΡƒΠ·Π½Π°Π» ΠΎΠ± этом. Git сохраняСт всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² свою Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π° ΠΏΠΎ Ρ…Π΅Ρˆ-суммС содСрТимого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π£ Git Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ основных состояния, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ваши Ρ„Π°ΠΉΠ»Ρ‹:
-Π˜Π·ΠΌΠ΅Π½Ρ‘Π½ (modified) относятся Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ помСнялись, Π½ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ Π±Ρ‹Π»ΠΈ зафиксированы.
-Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ (staged) ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии, ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚.
-Зафиксирован (committed) Ρ„Π°ΠΉΠ» ΡƒΠΆΠ΅ сохранён Π² вашСй локальной Π±Π°Π·Π΅.

ΠœΡ‹ подошли ΠΊ Ρ‚Ρ€Ρ‘ΠΌ основным сСкциям ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Git: рабочая копия working tree, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ индСксирования staging area ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Git .git directory.

image

Рабочая копия являСтся снимком ΠΎΠ΄Π½ΠΎΠΉ вСрсии ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΈΠ· сТатой Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Git ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π½Π° диск, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
ΠžΠ±Π»Π°ΡΡ‚ΡŒ индСксирования β€” это Ρ„Π°ΠΉΠ», ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ находящийся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Git, Π² Π½Ρ‘ΠΌ содСрТится информация ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π•Ρ‘ тСхничСскоС Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π½Π° языкС Git β€” «индСкс», Π½ΠΎ Ρ„Ρ€Π°Π·Π° Β«ΠΎΠ±Π»Π°ΡΡ‚ΡŒ индСксирования» Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ Git β€” это Ρ‚ΠΎ мСсто, Π³Π΄Π΅ Git Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π±Π°Π·Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.


Установка

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡƒΠΆΠ΅ стоит Π² систСмС, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ установка Π½Π° Mac OS, Windows, Linux, установка Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ свСТСй вСрсии ΠΈΠ· исходников https://git-scm.com/download/

` git --version ` 

ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ настройка Git

Π’ состав Git Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° git config, которая позволяСт ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ всС аспСкты Ρ€Π°Π±ΠΎΡ‚Ρ‹ Git, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ внСшний Π²ΠΈΠ΄. Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сохранСны Π² Ρ‚Ρ€Ρ‘Ρ… мСстах:

  1. Π€Π°ΠΉΠ» [path]/etc/gitconfig содСрТит значСния, ΠΎΠ±Ρ‰ΠΈΠ΅ для всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ систСмы ΠΈ для всСх ΠΈΡ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π². Если ΠΏΡ€ΠΈ запускС git config ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ --system, Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² этот Ρ„Π°ΠΉΠ». Π’Π°ΠΊ ΠΊΠ°ΠΊ этот Ρ„Π°ΠΉΠ» являСтся систСмным, Ρ‚ΠΎ Π²Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²Π° ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π½Π΅Π³ΠΎ.
  2. Π€Π°ΠΉΠ» ~/.gitconfig ΠΈΠ»ΠΈ ~/.config/git/config Ρ…Ρ€Π°Π½ΠΈΡ‚ настройки ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --global ΠΈ примСняСтся ΠΊΠΎ всСм рСпозиториям, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ систСмС.
  3. Π€Π°ΠΉΠ» config Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Git (Ρ‚. Π΅. .git/config) рСпозитория, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ…Ρ€Π°Π½ΠΈΡ‚ настройки ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ рСпозитория. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Git Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² этот Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --local, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠΠ΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π³Π΄Π΅-Ρ‚ΠΎ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Git, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эта опция Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.
    Настройки Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡŽΡ‚ настройки ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ значСния Π² .git/config ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния Π² [path]/etc/gitconfig

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС установлСнныС настройки ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΈ Π·Π°Π΄Π°Π½Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git config --list --show-origin

МоТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ вашС имя ΠΈ адрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹:

git config --global user.name "Name"
git config --global user.email [email protected]

Eсли ΡƒΠΊΠ°Π·Π°Π½Π° опция --global, Ρ‚ΠΎ эти настройки достаточно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² этом случаС Git Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ для всСго, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ Π² этой систСмС. Если для ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя ΠΈΠ»ΠΈ ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эту ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --global Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ с Π½ΡƒΠΆΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

МоТно Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ссли Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ сообщСниС Π² Git. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ стандартный Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ вашСй систСмы, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Vim. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Emacs, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

git config --global core.editor emacs

Настройка Π²Π΅Ρ‚ΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Когда Π²Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git init, Git создаёт Π²Π΅Ρ‚ΠΊΡƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ master ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя для создания Π²Π΅Ρ‚ΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ имя main для вашСй Π²Π΅Ρ‚ΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git config --global init.defaultBranch main

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git config --list, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС настройки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Git Π½Π°ΠΉΠ΄Ρ‘Ρ‚:

flyboroda@MacBook-Air-Artem ~ % git config --list
credential.helper=osxkeychain
init.defaultbranch=main
user.name=artemiosdev
[email protected]
user.password=********
core.excludesfile=~/.gitignore_global
credential.helper=osxkeychain
credential.username=artemiosdev
alias.last=log -1 HEAD   

Бброс пароля, ΠΏΡ€ΠΈ Π½ΠΎΠ²ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ git push систСма спросит ΠΏΠ°Ρ€ΠΎΠ»ΡŒ/Ρ‚ΠΎΠΊΠ΅Π½ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ввСсти Π½ΠΎΠ²Ρ‹ΠΉ

git config --global --unset user.password
  or
git config --unset user.password

Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠΌΠΎΡ‰ΡŒ?

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈ использовании Git, Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ способа ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ страницу руководства ΠΏΠΎ любой ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Git:

git help <ΠΊΠΎΠΌΠ°Π½Π΄Π°>
git <ΠΊΠΎΠΌΠ°Π½Π΄Π°> --help 
man git-<ΠΊΠΎΠΌΠ°Π½Π΄Π°>

К оглавлСнию

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ рСпозитория Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

Команда создаёт Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΈΠΌΠ΅Π½Π΅ΠΌ .git, содСрТащий всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ рСпозитория β€” структуру Git рСпозитория

git init

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ вСрсионный ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ пустого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°), Π²Π°ΠΌ стоит Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² индСкс ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π”ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого Π²Ρ‹ смоТСтС запустив ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git add (ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ использования). Π£ΠΊΠ°Π·Π°Π² индСксируСмыС Ρ„Π°ΠΉΠ»Ρ‹, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ git commit Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

git add *.md
git add .
git add <file name>
git commit -m 'Message about commit'

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


ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ рСпозитория

git clone 'https://github.com/artemiosdev/ProGit-MyNotes'

Π’ Git Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ нСсколько транспортных ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ использовался ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» https://, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ git:// ΠΈΠ»ΠΈ user@server:path/to/repo.git, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ SSH.


Π—Π°ΠΏΠΈΡΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ

image


ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ состояния Ρ„Π°ΠΉΠ»ΠΎΠ²

Основной инструмСнт, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для опрСдСлСния, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠ°ΠΊΠΎΠΌ состоянии находятся β€” это ΠΊΠΎΠΌΠ°Π½Π΄Π°

git status

Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²

Π•ΡΡ‚ΡŒ сайт ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» .gitignore ΠΏΠΎΠ΄ Π½ΡƒΠΆΠ½Ρ‹ΠΉ инструмСнтарий ΠΈ язык

https://www.toptal.com/developers/gitignore/

Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, Ρƒ вас имССтся Π³Ρ€ΡƒΠΏΠΏΠ° Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ автоматичСски Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π½ΠΎ ΠΈ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² списках нСотслСТиваСмых. К Ρ‚Π°ΠΊΠΈΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ относятся автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ (Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π»ΠΎΠ³ΠΈ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сборки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Ρ‚. ΠΏ.). Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» .gitignore. с пСрСчислСниСм шаблонов ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π°ΠΊΠΈΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ. И ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.

Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² настройкС Ρ„Π°ΠΉΠ»Π° .gitignore Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, это Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ вас ΠΎΡ‚ случайного добавлСния Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Ρ‚Π°ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.
К шаблонам Π² Ρ„Π°ΠΉΠ»Π΅ .gitignore ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°:

  • ΠŸΡƒΡΡ‚Ρ‹Π΅ строки, Π° Ρ‚Π°ΠΊΠΆΠ΅ строки, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с #, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.
  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ рСкурсивно для всСго Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ².
  • Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ рСкурсии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ символ слСш (/) Π² Π½Π°Ρ‡Π°Π»Π΅ шаблона.
  • Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ слСш (/) Π² ΠΊΠΎΠ½Π΅Ρ† шаблона.
  • МоТно ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ шаблон, использовав Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ (!) Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа.

Glob-ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½Ρ‹Π΅ рСгулярныС выраТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΌΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. Π‘ΠΈΠΌΠ²ΠΎΠ» (*) соотвСтствуСт 0 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ символам; ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ [abc] β€” Π»ΡŽΠ±ΠΎΠΌΡƒ символу ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² скобках (Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ a, b ΠΈΠ»ΠΈ c); Π·Π½Π°ΠΊ вопроса (?) соотвСтствуСт ΠΎΠ΄Π½ΠΎΠΌΡƒ символу; ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ символы, Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ дСфисом ([0-9]), ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΡŽΠ±ΠΎΠΌΡƒ символу ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΡ‚ 0 Π΄ΠΎ 9). Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ: a/**/z соотвСтствуСт a/z, a/b/z, a/b/c/z, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° .gitignore:

# Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .a
*.a

# Но ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» lib.a Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ ΠΏΠΎΠ΄ΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ΄ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹ΡˆΠ΅ 
!lib.a

# Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» TODO Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π½ΠΎ Π½Π΅ Ρ„Π°ΠΉΠ» Π² subdir/TODO 
/TODO

# Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ build/ 
build/

# Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» doc/notes.txt, Π½ΠΎ Π½Π΅ Ρ„Π°ΠΉΠ» doc/server/arch.txt 
doc/*.txt

# Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС .txt Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ doc/ 
doc/**/*.txt

GitHub ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ довольно ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² .gitignore Ρ„Π°ΠΉΠ»ΠΎΠ² для мноТСства ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ языков https://github.com/github/gitignore


ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ индСксированных ΠΈ нСиндСксированных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ, Π½ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ проиндСксировали, Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ git diff Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° сравниваСт содСрТимоС вашСго Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° с содСрТимым индСкса. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Ρ‰Ρ‘ Π½Π΅ проиндСксированныС измСнСния. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ проиндСксировали ΠΈ Ρ‡Ρ‚ΠΎ Π²ΠΎΠΉΠ΄Ρ‘Ρ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git diff --staged (ΠΈΠ»ΠΈ git diff --cached для просмотра проиндСксированных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (--staged ΠΈ --cached синонимы)). Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° сравниваСт ваши проиндСксированныС измСнСния с послСдним ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ:

git diff --staged
 or
git diff --cached

git diff сама ΠΏΠΎ сСбС Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ всС измСнСния сдСланныС с послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π° β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ проиндСксированы. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±ΠΈΠ²Π°Ρ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ссли Π²Ρ‹ проиндСксируСтС всС свои измСнСния, Ρ‚ΠΎ git diff Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Π΅Ρ€Π½Ρ‘Ρ‚.


ΠšΠΎΠΌΠΌΠΈΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния β€” это Π½Π°Π±Ρ€Π°Ρ‚ΡŒ git commit Для Π΅Ρ‰Ρ‘ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ напоминания, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ помСняли, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ -v Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git commit. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π° Π΄Π΅Π»ΡŒΡ‚Π°/diff ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ смоТСтС Ρ‚ΠΎΡ‡Π½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС измСнСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΠ»ΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ свой ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС вмСстС с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ commit ΡƒΠΊΠ°Π·Π°Π² Π΅Π³ΠΎ послС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -m

git commit -m "Message about commit"

image

Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ сохраняСт снимок состояния вашСго индСкса. Всё, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ проиндСксировали, Ρ‚Π°ΠΊ ΠΈ висит Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠ΅; Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ эти измСнСния Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π²Ρ‹ сохраняСтС снимок состояния вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС.


ΠŸΡ€ΠΎΠΏΡƒΡΠΊ индСксации

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этап индСксирования (Ρ‚.Π΅ добавлСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git add), Git прСдоставляСт простой способ. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -a Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git commit заставляСт Git автоматичСски ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠΆΠ΅ отслСТиваСмый Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Ρ„Π°ΠΉΠ», позволяя Π²Π°ΠΌ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· git add:

git commit -a -m 'Message about commit'

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ git add для Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ„Π»Π°Π³ -a Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС Ρ„Π°ΠΉΠ»Ρ‹. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТны: Ρ„Π»Π°Π³ -a ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ измСнСния.


Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ· Git, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· отслСТиваСмых Ρ„Π°ΠΉΠ»ΠΎΠ² (Ρ‚ΠΎΡ‡Π½Π΅Π΅, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· вашСго индСкса) Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π­Ρ‚ΠΎ позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π° git rm, которая Ρ‚Π°ΠΊΠΆΠ΅ удаляСт Ρ„Π°ΠΉΠ» ΠΈΠ· вашСго Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π· Π²Ρ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΊΠ°ΠΊ «нСотслСТиваСмый».

Если Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ» ΠΈ ΡƒΠΆΠ΅ проиндСксировали Π΅Π³ΠΎ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -f. Π­Ρ‚ΠΎ сдСлано для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ бСзопасности, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Ρ‘ Π½Π΅ Π±Ρ‹Π»ΠΈ записаны Π² снимок состояния ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· Git. Другая полСзная ΡˆΡ‚ΡƒΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ β€” это ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ· индСкса, оставив Π΅Π³ΠΎ ΠΏΡ€ΠΈ этом Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π½Π° Тёстком дискС, Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ измСнСния Π² Π½Ρ‘ΠΌ. Π­Ρ‚ΠΎ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Ρ‹ Π·Π°Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² Ρ„Π°ΠΉΠ» .gitignore ΠΈ ΠΏΠΎ ошибкС проиндСксировали, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, большой Ρ„Π°ΠΉΠ» с Π»ΠΎΠ³Π°ΠΌΠΈ, ΠΈΠ»ΠΈ ΠΊΡƒΡ‡Ρƒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² компиляции. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ --cached:

git rm --cached <file name>

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git rm ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΈΠ»ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹.

git rm log/\*.log

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слСш \ ΠΏΠ΅Ρ€Π΅Π΄ *. Он Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ свой собствСнный ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠΌΡ‘Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² Π²Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ вашСго ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° удаляСт всС Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .log ΠΈ находящиСся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ log/.
Или ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

git rm \*~

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° удаляСт всС Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° ~.


ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²

Команда mv eсли Π²Π°ΠΌ хочСтся ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»:

git mv file_from file_to

Однако, это эквивалСнтно Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄:

mv README MyFile
git rm README
git add MyFile

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

Команда git log ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ большоС количСство ΠΎΠΏΡ†ΠΈΠΉ для поиска ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ критСриям. Одним ΠΈΠ· самых ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² являСтся -p ΠΈΠ»ΠΈ --patch, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ (Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠ°Ρ‚Ρ‡), Π²Π½Π΅ΡΠ΅Π½Π½ΡƒΡŽ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π’Π°ΠΊ ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ количСство записСй Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹; ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -2 для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²ΡƒΡ… записСй:

git log -p -2

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½ΡƒΡŽ статистику для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ --stat:

git log --stat

ΠžΠΏΡ†ΠΈΡ --stat ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² список ΠΈ количСство ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ сколько строк Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΎ. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡΡƒΠΌΠΌΠ°Ρ€Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ являСтся --pretty. Π­Ρ‚Π° опция мСняСт Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π°. БущСствуСт нСсколько встроСнных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² отобраТСния.

НаиболСС интСрСсной ΠΎΠΏΡ†ΠΈΠ΅ΠΉ являСтся format, которая позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ОсобСнно это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ для автоматичСского Π°Π½Π°Π»ΠΈΠ·Π° β€” Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ явно, ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π΄Π°ΠΆΠ΅ послС обновлСния Git:

git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Artem Androsenko, 1 years ago : Change version number

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ для git log --pretty=format

`%H` Π₯Сш ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.   
`%h` Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ…Π΅Ρˆ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.   
`%T` Π₯Сш Π΄Π΅Ρ€Π΅Π²Π°.   
`%t` Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ…Π΅Ρˆ Π΄Π΅Ρ€Π΅Π²Π°.   
`%P` Π₯Сш Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ.   
`%p` Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ…Π΅Ρˆ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ.  
`%an` Имя Π°Π²Ρ‚ΠΎΡ€Π°.  
`%ae` ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π° Π°Π²Ρ‚ΠΎΡ€Π°.  
`%ad` Π”Π°Ρ‚Π° Π°Π²Ρ‚ΠΎΡ€Π° (Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ ` --date=option `).   
`%ar` ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π΄Π°Ρ‚Π° Π°Π²Ρ‚ΠΎΡ€Π°.   
`%cn` Имя ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅Ρ€Π°.   
`%ce` ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅Ρ€Π°.    
`%cd` Π”Π°Ρ‚Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅Ρ€Π°.   
`%cr` ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π΄Π°Ρ‚Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅Ρ€Π°.   
`%s` Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅. 

ΠžΠΏΡ†ΠΈΡ --graph ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ log. Π‘ этой ΠΎΠΏΡ†ΠΈΠ΅ΠΉ Π²Ρ‹ смоТСтС ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ нСбольшой Π³Ρ€Π°Ρ„ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ASCII, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ слияний:

git log --pretty=format:"%h %s" --graph
  * 2d3acf9 Ignore errors from SIGCHLD on trap
  *  5e3ee11 Merge branch 'master' of git://github.com/artemiosdev/grit
  |\
  | * 420eac9 Add method for getting the current branch
  * | 30e367c Timeout code and tests
  * | e1193f8 Support for heads with slashes in them
  |/
  * d6016bc Require time for xmlschema
  *  11d191e Merge branch 'defunkt' into local

НаиболСС распространСнныС ΠΎΠΏΡ†ΠΈΠΈ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git log

` -p ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Ρ‚Ρ‡ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.     
` --stat ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ статистику ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.     
` --shortstat ` ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строку с количСством ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ/вставок/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΉ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ` --stat `.    
` --name-only ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ список ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² послС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅.     
` --name-status ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ список Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹/ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹/ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.     
` --abbrev-commit ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСсколько символов SHA-1 Ρ‡Π΅ΠΊ-суммы вмСсто всСх 40.     
` --relative-date ` ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΄Π°Ρ‚Ρƒ Π² ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«2 weeks agoΒ») вмСсто стандартного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π΄Π°Ρ‚Ρ‹.    
` --graph ` ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ASCII Π³Ρ€Π°Ρ„ с вСтвлСниями ΠΈ историСй слияний.    
` --pretty ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎΠΏΡ†ΠΈΠΉ: `oneline`, `short`, `full`, `fuller` ΠΈ `format` (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ послСднСй ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ свой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚).   
` --oneline ` Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ для ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ использования ΠΎΠΏΡ†ΠΈΠΉ ` --pretty=oneline --abbrev-commit `

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π°

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ опциям форматирования Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΊΠΎΠΌΠ°Π½Π΄Π° git log ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ нСсколько ΠΎΠΏΡ†ΠΈΠΉ для ограничСния Π²Ρ‹Π²ΠΎΠ΄Π° β€” ΠΎΠΏΡ†ΠΈΠΉ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ подмноТСство ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ -<n> , Π³Π΄Π΅ n β€” это любоС Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число ΠΈ прСдставляСт собой n послСдних ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². ΠžΠΏΡ†ΠΈΠΈ для ограничСния Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ --since ΠΈ --until, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ список ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², сдСланных Π·Π° послСдниС Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ:

git log --since=2.weeks

Π­Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с большим количСством Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π΄Π°Ρ‚Ρƒ Π²ΠΈΠ΄Π° 2008-01-15 ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π΄Π°Ρ‚Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 2 years 1 day 3 minutes ago.

ДопускаСтся ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ нСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² --author ΠΈ --grep для поиска, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π»ΡŽΠ±ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ --author ΠΈ Π»ΡŽΠ±ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ --grep ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ; ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ --all-match заставит ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ всСм ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ --grep шаблонам.

ΠžΠΏΡ†ΠΈΡ -S, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² Π²ΠΈΠ΄Π΅ строки ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠ²Π»Π΅ΠΊΠ»ΠΎ Π·Π° собой Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ этой строки. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΠ» Π²Ρ‹Π·ΠΎΠ² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git log -S function_name

ΠžΠΏΡ†ΠΈΡ ΠΏΡƒΡ‚ΡŒ. Если Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈΠ»ΠΈ имя Ρ„Π°ΠΉΠ»Π°, Π²Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΌΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π»ΠΈ измСнСния этих Ρ„Π°ΠΉΠ»ΠΎΠ². Π­Ρ‚Π° опция всСгда указываСтся послСднСй послС Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΡ€Π΅ (--), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΠΈ ΠΎΡ‚ ΠΎΠΏΡ†ΠΈΠΉ:

git log -- path/to/file

ΠžΠΏΡ†ΠΈΠΈ для ограничСния Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git log

` -(n) ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСдниС n ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².    
` --since `, ` --after ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ сдСланы послС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹.     
` --until `, ` --before ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ сдСланы Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹.    
` --author ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… запись author совпадаСт с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ строкой.   
` --committer ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… запись committer совпадаСт с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ строкой.   
` --grep ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, сообщСниС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ строку.   
` -S ` ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠ²Π»Π΅ΠΊΠ»ΠΎ Π·Π° собой Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ строки.  

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

git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" \ --before="2008-11-01" --no-merges -- t/

Из ΠΏΠΎΡ‡Ρ‚ΠΈ 40 000 ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² истории исходного ΠΊΠΎΠ΄Π° Git, эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 6, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ этим критСриям. Π’ зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ порядка Ρ€Π°Π±ΠΎΡ‚Ρ‹, история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² вашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ большоС количСство ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² слияния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сами ΠΏΠΎ сСбС Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git log ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ --no-merges


ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ способы ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ сдСланных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны, Π½Π΅ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ! Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Ρ€Π΅Π΄ΠΊΠΈΡ… областСй Git, Π³Π΄Π΅ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌΠΈ дСйствиями ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠžΡ‚ΠΌΠ΅Π½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ссли Π²Ρ‹ сдСлали ΠΊΠΎΠΌΠΌΠΈΡ‚ слишком Ρ€Π°Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π±Ρ‹Π² Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ β€” внСситС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΈΡ… Π² индСкс ΠΈ сдСлайтС ΠΊΠΎΠΌΠΌΠΈΡ‚ Π΅Ρ‰Ρ‘ Ρ€Π°Π·, ΡƒΠΊΠ°Π·Π°Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ --amend:

git commit --amend

НапримСр, Ссли Π²Ρ‹ сдСлали ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈ поняли, Ρ‡Ρ‚ΠΎ Π·Π°Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния Π² Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

git commit -m 'Initial commit'
git add forgotten_file
git commit --amend

МоТно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ/Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сообщСниС послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°

git commit --amend -m "New text"

Π’ ΠΈΡ‚ΠΎΠ³Π΅ получится Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ β€” Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ.
ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ вноситС ΠΏΡ€Π°Π²ΠΊΠΈ Π² послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, Π²Ρ‹ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ исправляСтС Π΅Π³ΠΎ, сколько замСняСтС Π½ΠΎΠ²Ρ‹ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π΅Π³ΠΎ пСрСзаписываСт. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ всё выглядит Ρ‚Π°ΠΊ, Π±ΡƒΠ΄Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ сущСствовал, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠ½ большС Π½Π΅ появится Π² истории вашСго рСпозитория.


ΠžΡ‚ΠΌΠ΅Π½Π° индСксации Ρ„Π°ΠΉΠ»Π°

НапримСр, Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π΄Π²Π° Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π½ΠΎ случайно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git add * ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² индСкс ΠΎΠ±Π°. Как ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· индСкса ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…? Команда git status Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ Π²Π°ΠΌ:

git add *
git status
  On branch master
  Changes to be committed:
    (use "git reset HEAD <file>..." to unstage)

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ git reset HEAD <file> для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ· индСкса.


ΠžΡ‚ΠΌΠ΅Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ„Π°ΠΉΠ»Π΅

Команда git status Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ Π²Π°ΠΌ:

   Changes not staged for commit:
   (use "git checkout -- <file>..." to discard changes in working directory)
   
   git checkout -- <file>

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ git checkout -- <file> β€” опасная ΠΊΠΎΠΌΠ°Π½Π΄Π°. ВсС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΡ€ΠΎΠΏΠ°Π΄ΡƒΡ‚ β€” Git просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Π΅Π³ΠΎ вСрсиСй ΠΈΠ· послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Ни Π² ΠΊΠΎΠ΅ΠΌ случаС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ссли Π²Ρ‹ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ измСнСния Π² Ρ„Π°ΠΉΠ»Π΅ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.
ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, всС Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΠ°Π»ΠΎ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда Git ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ. МоТно Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π°ΠΆΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ· Π²Π΅Ρ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹, ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, пСрСзаписанныС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ --amend (см. ВосстановлСниС Π΄Π°Π½Π½Ρ‹Ρ…). Но всё, Ρ‡Ρ‚ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈ потСряно β€” скорСС всСго, потСряно навсСгда.


ΠžΡ‚ΠΌΠ΅Π½Π° дСйствий с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git restore

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π΄Π²Π° Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ Π΄Π²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… измСнСния, Π½ΠΎ случайно Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ git add * ΠΈ индСксируСтС ΠΈΡ… ΠΎΠ±Π°. Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· индСкса ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡƒΡ…? Команда git status Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π²Π°ΠΌ:

git add *
git status
 On branch master
 Changes to be committed:
 (use "git restore --staged <file>..." to unstage)

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git restore --staged <file> для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ индСксации Ρ„Π°ΠΉΠ»Π°.


ΠžΡ‚ΠΊΠ°Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git restore

Π§Ρ‚ΠΎ, Ссли Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ измСнСния Π² Ρ„Π°ΠΉΠ»Π΅ ? Как Π»Π΅Π³ΠΊΠΎ Π΅Π³ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ β€” Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΎΠ½ выглядСл ΠΏΡ€ΠΈ послСднСм ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ (ΠΈΠ»ΠΈ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠΌΠ΅Ρ‰Ρ‘Π½ Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³).
К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, git status Ρ‚ΠΎΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π’ Π²Ρ‹Π²ΠΎΠ΄Π΅ послСднСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, нСиндСксированная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

	Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git restore <file>..." to discard changes in working directory
    
    git restore <file>

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ git restore <file> β€” опасная ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π›ΡŽΠ±Ρ‹Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния, внСсСнныС Π² этот Ρ„Π°ΠΉΠ», исчСзнут β€” Git просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Ρ„Π°ΠΉΠ» послСднСй зафиксированной вСрсиСй. Никогда Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ссли Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Π½ΡƒΠΆΠ½Ρ‹ Π»ΠΈ Π²Π°ΠΌ эти нСсохранСнныС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния.


Π Π°Π±ΠΎΡ‚Π° с ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ рСпозиториями

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π²

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список настроСнных ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git remote. Она Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ названия доступных ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π². Если Π²Ρ‹ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ origin β€” имя ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Git Π΄Π°Ρ‘Ρ‚ сСрвСру, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅:
-v, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ адрСса для чтСния ΠΈ записи, привязанныС ΠΊ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ:

git remote -v
origin  https://github.com/schacon/ticgit (fetch)
origin  https://github.com/schacon/ticgit (push)

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π²

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅ΠΌΡƒ имя (shortname), просто Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

git remote add <shortname> <url>

НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Ρƒ ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ, Π½ΠΎ Π½Π΅Ρ‚Ρƒ Ρƒ вас, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git fetch <shortname>


ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория β€” Fetch ΠΈ Pull

Как Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΡƒΠ·Π½Π°Π»ΠΈ, для получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:

git fetch [remote-name]

Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° связываСтся с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ всС Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρƒ вас Π΅Ρ‰Ρ‘ Π½Π΅Ρ‚. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρƒ вас Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ ссылки Π½Π° всС Π²Π΅Ρ‚ΠΊΠΈ ΠΈΠ· этого ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠ»ΠΈΡ‚ΡŒ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Когда Π²Ρ‹ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΊΠΎΠΌΠ°Π½Π΄Π° clone автоматичСски добавляСт этот ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ origin. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, git fetch origin ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ всС Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° этот сСрвСр послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π΅Π³ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ (ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ измСнСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ fetch). Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° git fetch Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² ваш Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π½ΠΎ Π½Π΅ сливаСт ΠΈΡ… с ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ вашими Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ ΠΈ Π½Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎ, Π½Π°Π΄ Ρ‡Π΅ΠΌ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡΠ»ΠΈΡ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ с вашими, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹.


ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ (Push)

Когда Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своими Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Команда для этого дСйствия простая: git push <remote-name> <branch-name>. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ Π²Π΅Ρ‚ΠΊΡƒ main Π½Π° сСрвСр origin (повторимся, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ настраиваСт ΠΎΠ±Π° этих ΠΈΠΌΠ΅Π½ΠΈ автоматичСски), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²:

git push origin master

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


ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ рСпозитория

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ побольшС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git remote show <remote>. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, origin, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

git remote show origin

Она Π²Ρ‹Π΄Π°Ρ‘Ρ‚ URL ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± отслСТиваСмых Π²Π΅Ρ‚ΠΊΠ°Ρ…. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° любСзно сообщаСт Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹, Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΠ΅ main, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git pull, Π²Π΅Ρ‚ΠΊΠ° main с ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ сСрвСра Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π²Π»ΠΈΡ‚Π° Π² Π²Π°ΡˆΡƒ сразу послС получСния всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Она Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ список всСх ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Сю ссылок.


Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π²

Для пСрСимСнования ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git remote rename. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ oldname Π² newname, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ git remote rename:

git remote rename oldname newname

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ β€” Π²Ρ‹ смСнили сСрвСр ΠΈΠ»ΠΈ большС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ, ΠΈΠ»ΠΈ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ пСрСстал Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git remote rm

git remote remove repositoryname

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ссылки Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ всС отслСТиваСмыС Π²Π΅Ρ‚ΠΊΠΈ ΠΈ настройки, связанныС с этим Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ, Ρ‚Π°ΠΊ ΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.


Π Π°Π±ΠΎΡ‚Π° с Ρ‚Π΅Π³Π°ΠΌΠΈ

Git ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π² истории ΠΊΠ°ΠΊ Π²Π°ΠΆΠ½Ρ‹Π΅. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, эта Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² выпуска вСрсий (v1.0, ΠΈ Ρ‚. ΠΏ.). Π’Π°ΠΊΠΈΠ΅ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ Π² Git Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π΅Π³Π°ΠΌΠΈ.


ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ списка Ρ‚Π΅Π³ΠΎΠ²

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚Π΅Π³ΠΎΠ² Π² Git ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто. Достаточно Π½Π°Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git tag (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ -l ΠΈ --list ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹)

Поиск Ρ‚Π΅Π³Π° ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ. НапримСр, Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git содСрТит ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Π΅Π³ΠΎΠ². Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚Π΅Π³ΠΈ выпусков 1.8.5, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git tag -l "v1.8.5*"
  v1.8.5
  v1.8.5.1
  v1.8.5.2
  v1.8.5.3

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ список Ρ‚Π΅Π³ΠΎΠ² согласно ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, использованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² -l ΠΈΠ»ΠΈ --list становится ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.


Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π΅Π³ΠΎΠ²

Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π° основных Ρ‚ΠΈΠΏΠ° Ρ‚Π΅Π³ΠΎΠ²: лСгковСсныС ΠΈ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅.
ЛСгковСсный Ρ‚Π΅Π³ β€” это Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ, которая Π½Π΅ измСняСтся β€” просто ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚.

АннотированныС Ρ‚Π΅Π³ΠΈ хранятся Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Git ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Они ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму, содСрТат имя Π°Π²Ρ‚ΠΎΡ€Π°, Π΅Π³ΠΎ e-mail ΠΈ Π΄Π°Ρ‚Ρƒ создания, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ подписаны ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GNU Privacy Guard (GPG). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ рСкомСндуСтся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚Π΅Π³ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ всю ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ; Π½ΠΎ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΊΡƒ ΠΈΠ»ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‚ΠΎ для этого годятся ΠΈ лСгковСсныС.


АннотированныС Ρ‚Π΅Π³ΠΈ

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚Π΅Π³Π° β€” это ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ -a ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ tag:

git tag -a v1.4 -m "my version 1.4"
git tag
v1.4

ΠžΠΏΡ†ΠΈΡ -m Π·Π°Π΄Π°Ρ‘Ρ‚ сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ вмСстС с Ρ‚Π΅Π³ΠΎΠΌ. Если Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ сообщСниС, Ρ‚ΠΎ Git запустит Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ VIM, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ввСсти.
Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git show Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π΅Π³Π° вмСстС с ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ:

git show v1.4

ЛСгковСсныС Ρ‚Π΅Π³ΠΈ

ЛСгковСсный Ρ‚Π΅Π³ β€” это Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ способ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚. По сути, это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, сохранённая Π² Ρ„Π°ΠΉΠ» β€” большС Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π΅ хранится. Для создания лСгковСсного Ρ‚Π΅Π³Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΠΉ -a, -s ΠΈ -m, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅:

git tag v1.4-lw

ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ расстановка Ρ‚Π΅Π³ΠΎΠ²

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρ‚Π°ΠΊΠΎΠ²Π°:

git log --pretty=oneline
  4682c3261057305bdd616e23b64b0857d832627b Add todo file
  166ae0c4d3f420721acbb115cc33848dfcc2121a Create write support
  9fceb02d0ae598e95dc970b74767f19372d61af8 Update rakefile

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° v1.2, которая Π±Ρ‹Π»Π° Ρ‚Π°ΠΌ, Π³Π΄Π΅ находится ΠΊΠΎΠΌΠΌΠΈΡ‚ Β«Update rakefileΒ». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π΅Π³ ΠΈ ΠΏΠΎΠ·ΠΆΠ΅. Для ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму (ΠΈΠ»ΠΈ Π΅Ρ‘ Ρ‡Π°ΡΡ‚ΡŒ) ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

git tag -a v1.2 9fceb02

ОбмСн Ρ‚Π΅Π³Π°ΠΌΠΈ

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΠΌΠ°Π½Π΄Π° git push Π½Π΅ отправляСт Ρ‚Π΅Π³ΠΈ Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ сСрвСра. ПослС создания Ρ‚Π΅Π³ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ явно Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ сСрвСр. ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Π²Π΅Ρ‚ΠΎΠΊ β€” достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git push origin <tagname>

git push origin v1.5

Если Ρƒ вас ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Π΅Π³ΠΎΠ², ΠΈ Π²Π°ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ всС Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ --tags для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git push

git push origin --tags

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ (clone) ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ git pull ΠΈΠ· вашСго рСпозитория, Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π²Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΈ ваши ΠΌΠ΅Ρ‚ΠΊΠΈ.
Команда git push отправляСт ΠΎΠ±Π° Ρ‚ΠΈΠΏΠ° Ρ‚Π΅Π³ΠΎΠ².
ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Ρ‚Π΅Π³ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git push <remote> --tags Π½Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ лСгковСсныС Ρ‚Π΅Π³ΠΈ.


Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π³ΠΎΠ²

Для удалСния Ρ‚Π΅Π³Π° Π² локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git tag -d <tagname>. НапримСр, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ созданный Ρ€Π°Π½Π΅Π΅ лСгковСсный Ρ‚Π΅Π³ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

git tag -d v1.4-lw
Deleted tag 'v1.4-lw' (was e7d5add)

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Ρ‚Π΅Π³Π° Π½Π΅ происходит Π΅Π³ΠΎ удалСния с Π²Π½Π΅ΡˆΠ½ΠΈΡ… сСрвСров. БущСствуСт Π΄Π²Π° способа ΠΈΠ·ΡŠΡΡ‚ΠΈΡ Ρ‚Π΅Π³Π° ΠΈΠ· внСшнСго рСпозитория. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ β€” это Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git push <remote> :refs/tags/<tagname>

git push origin :refs/tags/v1.4-lw
  To /[email protected]:schacon/simplegit.git
   - [deleted]         v1.4-lw

Π­Ρ‚ΠΎ слСдуСт ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ внСшнСго Ρ‚Π΅Π³Π° пустым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΅Π³ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ.
Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚Π΅Π³ ΠΈΠ· внСшнСго рСпозитория Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ:

git push origin --delete <tagname>

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Ρ‚Π΅Π³

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ вСрсии Ρ„Π°ΠΉΠ»ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅Π³, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ git checkout для Ρ‚Π΅Π³Π°. Однако, это ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Ρ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² состояниС Β«detached HEADΒ», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ряд нСприятных ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов.

git checkout v2.0.0
Note: switching to 'v2.0.0'.

Если Π² состоянии Β«detached HEADΒ» внСсти измСнСния ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚, Ρ‚ΠΎ Ρ‚Π΅Π³ Π½Π΅ измСнится, ΠΏΡ€ΠΈ этом Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π²Π΅Ρ‚ΠΎΠΊ, Π° доступ ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Π΅Π³ΠΎ Ρ…Π΅ΡˆΡƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ внСсти измСнСния β€” ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· старых вСрсий β€” скорСС всСго Π²Π°ΠΌ слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ:

git checkout -b version2 v2.0.0
Switched to a new branch 'version2'

Если ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Π²Π΅Ρ‚ΠΊΠ΅ version2, Ρ‚ΠΎ ΠΎΠ½Π° сдвинСтся Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚Π΅Π³Π° v2.0.0, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡŒΡ‚Π΅ с этим остороТны.


ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ Π² Git (aliases)

Git Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ввСсти, Ссли Π²Ρ‹ Π²Π²Π΅Π»ΠΈ Π΅Ρ‘ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. Если Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для Git Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π²Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ псСвдонимы (alias) для любой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git config. Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² псСвдонимов:

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вмСсто Π²Π²ΠΎΠ΄Π° git commit, Π²Π°ΠΌ достаточно Π½Π°Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ git ci.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ last ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

git config --global alias.last 'log -1 HEAD'

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚:

git last

Git просто замСняСт эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° созданныС Π²Π°ΠΌΠΈ псСвдонимы (alias). Однако, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ внСшнюю ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π° Π½Π΅ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Git. Π’ этом случаС, слСдуСт Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с символа !. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ свои ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ.


К оглавлСнию

image

ΠŸΡ€ΠΈΠ½ΡΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ названия: Master - Hotfix - Release - Development - Feature

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅, Π²Ρ‹ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΡΠ΅Ρ‚Π΅ΡΡŒ ΠΎΡ‚ основной Π»ΠΈΠ½ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ нСзависимо ΠΎΡ‚ Π½Π΅Ρ‘, Π½Π΅ вмСшиваясь Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ линию.

git add README test.rb LICENSE
git commit -m 'Initial commit'

Когда Π²Ρ‹ создаётС ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git commit, Git вычисляСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° (Π² нашСм случаС, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ основной ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°) ΠΈ сохраняСт Π΅Π³ΠΎ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ Git создаёт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° основноС Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° для возмоТности Π²ΠΎΡΡΠΎΠ·Π΄Π°Ρ‚ΡŒ этот снимок Π² случаС нСобходимости.

Π’Π°Ρˆ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: Ρ‚Ρ€ΠΈ Π±Π»ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ»), ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², содСрТащий список Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌ Π±Π»ΠΎΠ±ΠΎΠ², Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, содСрТащий ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ².

image

Если Π²Ρ‹ сдСлаСтС измСнСния ΠΈ создадитС Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚.

image

Π’Π΅Ρ‚ΠΊΠ° Π² Git β€” это простой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, имя основной Π²Π΅Ρ‚ΠΊΠΈ Π² Git β€” master or main. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π°Ρ‡Π½Ρ‘Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π²Π΅Ρ‚ΠΊΠ° master Π±ΡƒΠ΄Π΅Ρ‚ всСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ создании ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Π΅Ρ‚ΠΊΠΈ master Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ автоматичСски.

Π’Π΅Ρ‚ΠΊΠ° master Π² Git β€” это Π½Π΅ какая-Ρ‚ΠΎ особСнная Π²Π΅Ρ‚ΠΊΠ°. Она Ρ‚ΠΎΡ‡Π½ΠΎ такая ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ. Она сущСствуСт ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΎ всСх рСпозиториях Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π΅Ρ‘ создаёт ΠΊΠΎΠΌΠ°Π½Π΄Π° git init, Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ людСй Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ Π΅Ρ‘ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.

image


Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ

Π§Ρ‚ΠΎ ΠΆΠ΅ Π½Π° самом Π΄Π΅Π»Π΅ происходит ΠΏΡ€ΠΈ создании Π²Π΅Ρ‚ΠΊΠΈ? ВсСго лишь создаётся Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ для дальнСйшСго пСрСмСщСния. Допустим Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ testing. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git branch :

git branch testing

image

Как Git опрСдСляСт, Π² ΠΊΠ°ΠΊΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ? Он Ρ…Ρ€Π°Π½ΠΈΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD. Π’ Git β€” это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Π’ нашСм случаС ΠΌΡ‹ всС Π΅Ρ‰Π΅ находимся Π² Π²Π΅Ρ‚ΠΊΠ΅ master. Команда git branch Ρ‚ΠΎΠ»ΡŒΠΊΠΎ создаёт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π½ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½Π° Π½Π΅Ρ‘.

image

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ это ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ простой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git log, которая ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΊΡƒΠ΄Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π²Π΅Ρ‚ΠΎΠΊ. Π­Ρ‚Π° опция называСтся β€”decorate.

git log --oneline --decorate
f30ab (HEAD -> master, testing)

Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ f30ab Π²Π΅Ρ‚ΠΊΠΈ: master ΠΈ testing.


ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΎΠΊ

Для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git checkout. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠΌΡΡ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ testing:

git checkout testing

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD пСрСмСстится Π½Π° Π²Π΅Ρ‚ΠΊΡƒ testing.

image

Какой Π² этом смысл? Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚:

vim test.rb
git commit -a -m 'made a change'

image

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Π°Ρ ситуация: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ testing пСрСмСстился Π²ΠΏΠ΅Ρ€Ρ‘Π΄, Π° master ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π³Π΄Π΅ Π²Ρ‹ Π±Ρ‹Π»ΠΈ Π΄ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Π΅Ρ‚ΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git checkout. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠΌΡΡ Π½Π°Π·Π°Π΄ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master:

git checkout master

git log Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ всС Π²Π΅Ρ‚ΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Если Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git log прямо сСйчас, Ρ‚ΠΎ Π² Π΅Ρ‘ Π²Ρ‹Π²ΠΎΠ΄Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданная Π²Π΅Ρ‚ΠΊΠ° testing Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.
Π’Π΅Ρ‚ΠΊΠ° Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ исчСзла; просто Git Π½Π΅ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½Π° вас интСрСсуСт, ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΏΠΎ Π΅Π³ΠΎ мнСнию ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ git log ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ.
Для просмотра истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Ρ‘ имя: git log testing Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΠΎ всСм Π²Π΅Ρ‚ΠΊΠ°ΠΌ β€” Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ„Π»Π°Π³ΠΎΠΌ: git log --all

image

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° сдСлала Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ: пСрСмСстила ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD Π½Π°Π·Π°Π΄ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master ΠΈ Π²Π΅Ρ€Π½ΡƒΠ»Π° Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π² Ρ‚ΠΎ состояниС, Π½Π° снимок ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ master. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС вносимыС с этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° измСнСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ старой вСрсии ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π²Ρ‹ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΠ»ΠΈ всС измСнСния Π²Π΅Ρ‚ΠΊΠΈ testing ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ.

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΎΠΊ мСняСт Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π’Π°ΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π²Π΅Ρ‚ΠΎΠΊ Π² Git происходит ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Если Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ выглядСл Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² Ρ‚Ρƒ Π²Π΅Ρ‚ΠΊΡƒ. Если Git ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ этого ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ β€” ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π²ΠΎΠΎΠ±Ρ‰Π΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Π΅Ρ‰Π΅ нСсколько ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ создадим ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚:

vim test.rb
git commit -a -m 'made other changes'

Π’Π΅ΠΏΠ΅Ρ€ΡŒ история вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ€Π°Π·ΠΎΡˆΠ»Π°ΡΡŒ (см РазвСтвлённая история). Π’Ρ‹ создали Π²Π΅Ρ‚ΠΊΡƒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈΡΡŒ Π½Π° Π½Π΅Π΅, ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² Π½Π΅ΠΉ. Π­Ρ‚ΠΈ измСнСния ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ свободно ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Ρ‚ΡƒΠ΄Π° ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Π° ΠΊΠΎΠ³Π΄Π° понадобится β€” ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ…. И всС это дСлаСтся простыми ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ: branch, checkout ΠΈ commit.

image

ВсС описанныС дСйствия ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git log. Для отобраТСния истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ полоТСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π²Π΅Ρ‚ΠΎΠΊ ΠΈ истории вСтвлСния Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git log --oneline --decorate --graph --all

git log --oneline --decorate --graph --all
  * c2b9e (HEAD, master) Made other changes
  | * 87ab2 (testing) Made a change
  |/
  * f30ab Add feature #32 - ability to add new formats to the central interface
  * 34ac2 Fix bug #1328 - stack overflow under certain conditions
  * 98ca9 initial commit of my project

Π’Π΅Ρ‚ΠΊΠ° Π² Git β€” это простой Ρ„Π°ΠΉΠ», содСрТащий 40 символов ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы SHA-1 ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚; поэтому ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π΅ΡˆΡ‘Π²Ρ‹ΠΌΠΈ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния потрСблСния рСсурсов ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.


ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ созданиС Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π½Π΅Ρ‘

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ сразу Π½Π° Π½Π΅Ρ‘ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ β€” это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git checkout -b <newbranchname>
Начиная с Git вСрсии 2.23, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git switch вмСсто git checkout, Ρ‡Ρ‚ΠΎΠ±Ρ‹:
-ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ: git switch testing-branch.
-Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π½Π΅Π΅: git switch -c new-branch. Π€Π»Π°Π³ -c ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚: --create.
-Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΈΠ·Π²Π»Π΅Ρ‡Ρ‘Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅: git switch -


ΠžΡΠ½ΠΎΠ²Ρ‹ вСтвлСния ΠΈ слияния

image

Π’Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ #53 ΠΈΠ· вашСй систСмы отслСТивания ошибок. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ сразу ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π½Π΅Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git checkout с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -b:

git checkout -b iss53
  Switched to a new branch "iss53"

Π­Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС Ρ‡Ρ‚ΠΎ ΠΈ:

git branch iss53
git checkout iss53

image

Π’Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π½Π°Π΄ своим сайтом ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‚ΠΊΠ° iss53 двиТСтся Π²ΠΏΠ΅Ρ€Π΅Π΄, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈΡΡŒ Π½Π° Π½Π΅Π΅ Ρ€Π°Π½Π΅Π΅ (HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π΅Π΅).

vim index.html
git commit -a -m 'Create new footer [issue 53]'

image

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Ссли Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π»ΠΈΠ±ΠΎ индСкс содСрТат нСзафиксированныС измСнСния, ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠ΅ с Π²Π΅Ρ‚ΠΊΠΎΠΉ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ, Ρ‚ΠΎ Git Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ. Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΈΠ· чистого Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ состояния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π•ΡΡ‚ΡŒ способы ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это (ΠΏΡ€ΠΈΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ измСнСния stash ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚ amend), Π½ΠΎ ΠΎΠ± этом ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠŸΡ€ΠΈΠΏΡ€ΡΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈ очистка Π³Π»Π°Π²Ρ‹ 7

Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ для исправлСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ исправлСниС

git checkout -b hotfix
  Switched to a new branch 'hotfix'
vim index.html
git commit -a -m 'Fix broken email address'
  [hotfix 1fb7853] Fix broken email address

image

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ слияниС Π²Π΅Ρ‚ΠΊΠΈ hotfix с Π²Π΅Ρ‚ΠΊΠΎΠΉ master для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚. Π­Ρ‚ΠΎ дСлаСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git merge:

git checkout master
git merge hotfix
Updating f42c576..3a0874c
  Fast-forward
   index.html | 2 ++
   1 file changed, 2 insertions(+)

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Ρ„Ρ€Π°Π·Ρƒ fast-forward Π² этом слиянии? Git просто пСрСмСстил ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Π΅Ρ‚ΠΊΠΈ Π²ΠΏΠ΅Ρ€Π΅Π΄, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ C4, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ слитая Π²Π΅Ρ‚ΠΊΠ° hotfix, Π±Ρ‹Π» прямым ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° C2, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π΄ΠΎ этого. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли ΠΊΠΎΠΌΠΌΠΈΡ‚ сливаСтся с Ρ‚Π΅ΠΌ, Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ двигаясь ΠΏΠΎ истории прямо, Git ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ слияниС просто пСрСнося ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Π΅Ρ‚ΠΊΠΈ Π²ΠΏΠ΅Ρ€Π΅Π΄, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅Ρ‚ расхоТдСний Π² измСнСниях. Π­Ρ‚ΠΎ называСтся fast-forward.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ваши измСнСния Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π΅Ρ‚ΠΊΠ° master, ΠΈ исправлСниС ΠΌΠΎΠΆΠ½ΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ.

image

ПослС внСдрСния исправлСния ΠΈΠ· Ρ€Π°Π½Π΅Π΅ созданной Π²Π΅Ρ‚ΠΊΠΈ, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ hotfix, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° большС Π½Π΅ Π½ΡƒΠΆΠ½Π° β€” Π²Π΅Ρ‚ΠΊΠ° master ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ ΠΆΠ΅ самоС мСсто. Для удалСния Π²Π΅Ρ‚ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git branch с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -d:

git branch -d hotfix
  Deleted branch hotfix (3a0874c)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ iss53 ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ #53:

git checkout iss53
  Switched to branch "iss53"
vim index.html
git commit -a -m 'Finish the new footer [issue 53]'
  [iss53 ad82d7a] Finish the new footer [issue 53]
  1 file changed, 1 insertion(+)

image

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ всС измСнСния ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ hotfix Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Π²Π°ΡˆΡƒ Π²Π΅Ρ‚ΠΊΡƒ iss53. Если ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ master Π² Π²Π°ΡˆΡƒ Π²Π΅Ρ‚ΠΊΡƒ iss53 ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git merge master, ΠΈΠ»ΠΈ ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ слияниС этих ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Π»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ iss53 Π² master.


ΠžΡΠ½ΠΎΠ²Ρ‹ слияния

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ #53 Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π° ΠΈ Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ Π²Π»ΠΈΡ‚ΡŒ Π² Π²Π΅Ρ‚ΠΊΡƒ master. Для этого Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ слияниС Π²Π΅Ρ‚ΠΊΠΈ iss53 Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹ Π΄Π΅Π»Π°Π»ΠΈ это с Π²Π΅Ρ‚ΠΊΠΎΠΉ hotfix Ρ€Π°Π½Π΅Π΅. ВсС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ β€” ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ измСнСния, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git merge:

git checkout master
  Switched to branch 'master'
git merge iss53  

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ отличаСтся ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° слияния Π²Π΅Ρ‚ΠΊΠΈ hotfix. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ отвСтвился Π² Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ находимся, Π½Π΅ являСтся прямым Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ Π²Π΅Ρ‚ΠΊΠΈ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ выполняСм слияниС, Git придётся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚Ρ€ΡƒΠ΄ΠΈΡ‚ΡŒΡΡ. Π’ этом случаС Git выполняСт простоС трёхстороннСС слияниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ послСдниС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ ΠΈ ΠΎΠ±Ρ‰Π΅Π³ΠΎ для Π½ΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

image

ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ просто ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Π΅Ρ‚ΠΊΠΈ Π²ΠΏΠ΅Ρ€Ρ‘Π΄, Git создаёт Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ снимок трёхстороннСго слияния, Π° Π·Π°Ρ‚Π΅ΠΌ автоматичСски Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π­Ρ‚ΠΎΡ‚ особый ΠΊΠΎΠΌΠΌΠΈΡ‚ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ слияния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ Π½Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°.

image

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° измСнСния слиты, Π²Π΅Ρ‚ΠΊΠ° iss53 большС Π½Π΅ Π½ΡƒΠΆΠ½Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Π² систСмС отслСТивания ошибок ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ:

git branch -d iss53

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ слияния

Иногда процСсс Π½Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π³Π»Π°Π΄ΠΊΠΎ. Если Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π² Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡ‹Ρ… Π²Π΅Ρ‚ΠΊΠ°Ρ…, Git Π½Π΅ смоТСт ΠΈΡ… чисто ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ.

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

Git Π½Π΅ создал ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния автоматичСски. Он остановил процСсс Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚. Π§Ρ‚ΠΎΠ±Ρ‹ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ послС появлСния ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ git status:

git status
  On branch master
  You have unmerged paths.
    (fix conflicts and run "git commit")
  Unmerged paths:
    (use "git add <file>..." to mark resolution)
      both modified:      index.html
  no changes added to commit (use "git add" and/or "git commit -a")

Всё, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ слияния, пСрСчисляСтся ΠΊΠ°ΠΊ нСслитоС. Π’ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Git добавляСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π’ вашСм Ρ„Π°ΠΉΠ»Π΅ появился Ρ€Π°Π·Π΄Π΅Π», выглядящий ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

<<<<<<< HEAD:index.html
  <div id="footer">contact : [email protected]</div>
  =======
  <div id="footer">
   please contact us at [email protected]
  </div>
  >>>>>>> iss53:index.html

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ вСрсия ΠΈΠ· HEAD (вашСй Π²Π΅Ρ‚ΠΊΠΈ master, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Ρ‘ Π²Ρ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ запуском ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ слияния) β€” это вСрхняя Ρ‡Π°ΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠ° (всё, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ =======), Π° вСрсия ΠΈΠ· вашСй Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ iss53 прСдставлСна Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚, придётся Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ содСрТимоС ΠΏΠΎ-своСму. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚, Π·Π°ΠΌΠ΅Π½ΠΈΠ² вСсь Π±Π»ΠΎΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

<div id="footer">
  please contact us at [email protected]
</div>

Π’ этом Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части, Π° строки <<<<<<<, ======= ΠΈ >>>>>>> ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹. Π Π°Π·Ρ€Π΅ΡˆΠΈΠ² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π²ΠΎ всСх Ρ„Π°ΠΉΠ»Π°Ρ…, запуститС git add для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹ΠΉ. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π² индСкс ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ для Git, Ρ‡Ρ‚ΠΎ всС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π² Π½Ρ‘ΠΌ исправлСны. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ графичСский инструмСнт (Π΅ΡΡ‚ΡŒ ΠΈ Π² Xcode Ρ‚ΠΎΠΆΠ΅) для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ git mergetool, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Ρ‚ вас ΠΏΠΎ всСм ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ:

git mergetool
  This message is displayed because 'merge.tool' is not configured.
  See 'git mergetool --tool-help' or 'git help config' for more details.
  'git mergetool' will now attempt to use one of the following tools:
  opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge
  p4merge araxis bc3 codecompare vimdiff emerge
  Merging:
  index.html
  Normal merge conflict for 'index.html':
    {local}: modified file
    {remote}: modified file
  Hit return to start merge resolution tool (opendiff):

Cписок всСх ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… инструмСнтов прСдставлСн Π²Π²Π΅Ρ€Ρ…Ρƒ послС Ρ„Ρ€Π°Π·Ρ‹ one of the following tools. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ инструмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
Если Π²Ρ‹ считаСтС, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… пояснСний β€” ΠΎΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ измСнСния, Ссли это Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ.

image

image


Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ

Команда git branch Π΄Π΅Π»Π°Π΅Ρ‚ нСсколько большС, Ρ‡Π΅ΠΌ просто создаёт ΠΈ удаляСт Π²Π΅Ρ‚ΠΊΠΈ. ΠŸΡ€ΠΈ запускС Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ простой список ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Ρƒ вас Π²Π΅Ρ‚ΠΎΠΊ:

git branch
    iss53
  * master
    testing

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° символ *, стоящий ΠΏΠ΅Ρ€Π΅Π΄ Π²Π΅Ρ‚ΠΊΠΎΠΉ master: ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ (Ρ‚. Π΅. Π²Π΅Ρ‚ΠΊΡƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ HEAD). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ сСйчас сдСлаСтС ΠΊΠΎΠΌΠΌΠΈΡ‚, Π²Π΅Ρ‚ΠΊΠ° master пСрСмСстится Π²ΠΏΠ΅Ρ€Ρ‘Π΄ Π² соотвСтствии с вашими послСдними измСнСниями. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π²Π΅Ρ‚ΠΎΠΊ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git branch -v:

git branch -v
    iss53   93b412c Fix javascript issue
  * master  7a98805 Merge branch 'iss53'
    testing 782fd34 Add scott to the author list in the readme

ΠžΠΏΡ†ΠΈΠΈ --merged ΠΈ --no-merged ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ этот список для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ… Π²Π΅Ρ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слиты ΠΈΠ»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ слиты Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚Π΅ Π²Π΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΡƒΠΆΠ΅ слили с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git branch --merged :

git branch --merged
    iss53
  * master

Π’Π΅Ρ‚ΠΊΠ° iss53 присутствуСт Π² этом спискС ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π°Π½Π΅Π΅ слили Π΅Ρ‘ Π² master. Π’Π΅ Π²Π΅Ρ‚ΠΊΠΈ ΠΈΠ· этого списка, ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π½Π΅Ρ‚ символа *, ΠΌΠΎΠΆΠ½ΠΎ смСло ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git branch -d; Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ· этих Π²Π΅Ρ‚ΠΎΠΊ ΡƒΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ потСряСтся. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС Π²Π΅Ρ‚ΠΊΠΈ, содСрТащиС Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΠΎΠΊΠ° Π΅Ρ‰Ρ‘ Π½Π΅ слили Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git branch --no-merged:

git branch --no-merged
    testing

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΡΡ‚Π°Π²ΡˆΡƒΡŽΡΡ Π²Π΅Ρ‚ΠΊΡƒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° содСрТит Π΅Ρ‰Ρ‘ Π½Π΅ слитыС Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Ρ‘ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git branch -d ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ошибкС:

git branch -d testing
  error: The branch 'testing' is not fully merged.
  If you are sure you want to delete it, run 'git branch -D testing'.

Если Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ вмСстС со всСми Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ -D, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² подсказкС.

Если Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈΠ»ΠΈ Π²Π΅Ρ‚ΠΊΠ°, Ρ‚ΠΎ ΠΎΠΏΡ†ΠΈΠΈ --merged ΠΈ --no-merged ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚ Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ слито ΠΈΠ»ΠΈ Π½Π΅ слито с вашСй Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ соотвСтствСнно. Π’Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ извлСкая ΠΈ Π½Π΅ пСрСходя Π½Π° Π½Π΅Ρ‘.

git checkout testing
git branch --no-merged master
             topicA
             featureB

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

НС ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всё Π΅Ρ‰Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ участниками.
ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ вас Π΅ΡΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ° с ΠΈΠΌΠ΅Π½Π΅ΠΌ bad-branch-name, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Ρ‘ Π½Π° corrected-branch-name, сохранив ΠΏΡ€ΠΈ этом всю ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. ВмСстС с этим, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ имя Π²Π΅Ρ‚ΠΊΠΈ Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ сСрвСрС (GitHub, GitLab ΠΈΠ»ΠΈ Π΄Ρ€ сСрвСр). Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ?

ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ локально с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git branch --move:

git branch --move bad-branch-name corrected-branch-name

Π’Π΅Ρ‚ΠΊΠ° bad-branch-name Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π° Π² corrected-branch-name, Π½ΠΎ это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ локальноС. Π§Ρ‚ΠΎΠ±Ρ‹ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π΅Ρ‘ Ρ‚ΡƒΠ΄Π°:

git push --set-upstream origin corrected-branch-name

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Π³Π΄Π΅ ΠΌΡ‹ сСйчас находимся:

git branch --all
  * corrected-branch-name
    main
    remotes/origin/bad-branch-name
    remotes/origin/corrected-branch-name
    remotes/origin/main

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ тСкущая Π²Π΅Ρ‚ΠΊΠ° corrected-branch-name, которая Ρ‚Π°ΠΊΠΆΠ΅ присутствуСт ΠΈ Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ сСрвСрС. Однако, старая Π²Π΅Ρ‚ΠΊΠ° всё Π΅Ρ‰Ρ‘ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Ρ‚Π°ΠΌ, Π½ΠΎ Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

git push origin --delete bad-branch-name

ИзмСнСниС ΠΈΠΌΠ΅Π½ΠΈ Π³Π»Π°Π²Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ

ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠΉΡ‚Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ master Π² main с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

git branch --move master main

Π§Ρ‚ΠΎΠ±Ρ‹ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ³Π»ΠΈ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ main, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‘ Π² ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ доступной Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

git push --set-upstream origin main

Π’ ΠΈΡ‚ΠΎΠ³Π΅, состояниС рСпозитория становится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

git branch --all
  * main
    remotes/origin/HEAD -> origin/master
    remotes/origin/main
    remotes/origin/master

Π’Π°ΡˆΠ° локальная Π²Π΅Ρ‚ΠΊΠ° master исчСзла, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Π²Π΅Ρ‚ΠΊΠΎΠΉ main. Π’Π΅Ρ‚ΠΊΠ° main доступна Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Бтарая Π²Π΅Ρ‚ΠΊΠ° master всё Π΅Ρ‰Ρ‘ присутствуСт Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ участники Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ master Π² качСствС основы для своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚Π΅ ряд Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ стоят ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

β€’ ВсС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ свой ΠΊΠΎΠ΄ ΠΈ/ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ.

β€’ ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ всСх запускаСмых тСстов.

β€’ Π˜ΡΠΏΡ€Π°Π²ΡŒΡ‚Π΅ скрипты сборки ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ².

β€’ ΠŸΠΎΠΏΡ€Π°Π²ΡŒΡ‚Π΅ настройки рСпозитория Π½Π° сСрвСрС: Π·Π°Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° слияния, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ настройки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ Π²Π΅Ρ‚ΠΎΠΊ.

β€’ ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, исправив ссылки, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

β€’ Π‘Π»Π΅ΠΉΡ‚Π΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚Π΅ запросы Π½Π° слияниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½Π°Ρ†Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ всС эти Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‚ΠΊΠ° main Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Π΅Ρ‚ΠΊΠ° master, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ master:

git push origin --delete master

Π Π°Π±ΠΎΡ‚Π° с Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ

Π”ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ

ИдСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ каТдая Π²Π΅Ρ‚ΠΊΠ° прСдставляСт собой ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ; ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ, содСрТимоС сливаСтся Π² Π²Π΅Ρ‚ΠΊΡƒ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π²Ρ‹ΡˆΠ΅.

image

image


ВСматичСскиС Π²Π΅Ρ‚ΠΊΠΈ

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

image

image


Π£Π΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ

origin β€” это Π½Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.
Подобно названию Π²Π΅Ρ‚ΠΊΠΈ master, origin Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния Π² Git. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ master β€” это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π²Π΅Ρ‚ΠΊΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ git init Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, origin β€” это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ сСрвСра, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС git clone. Если Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git clone -o newname, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Π΅Ρ‚ΠΊΠ° слСТСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄ newname/master.

image

Если Π²Ρ‹ сдСлаСтС Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² своСй локальной Π²Π΅Ρ‚ΠΊΠ΅ master, Π° Ρ‚Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ измСнСния Π½Π° сСрвСр git.ourcompany.com ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ Ρ‚Π°ΠΌ Π²Π΅Ρ‚ΠΊΡƒ master, Ρ‚ΠΎ ваши истории продолТатся ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Пока Π²Ρ‹ Π½Π΅ ΡΠ²ΡΠΆΠ΅Ρ‚Π΅ΡΡŒ с сСрвСром origin ваш ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ origin/master останСтся Π½Π° мСстС.

image

Для синхронизации Π²Π°ΡˆΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ сСрвСром Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git fetch <remote> (Π² нашСм случаС git fetch origin). Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° опрСдСляСт ΠΊΠ°ΠΊΠΎΠΌΡƒ сСрвСру соотвСтствуСт origin (Π² нашСм случаС это git.ourcompany.com), ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΎΡ‚Ρ‚ΡƒΠ΄Π° Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρƒ вас Π΅Ρ‰Ρ‘ Π½Π΅Ρ‚, ΠΈ обновляСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, сдвигая ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ origin/master Π½Π° Π½ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.

image

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ Π² ситуации с нСсколькими ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ сСрвСрами, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Git-сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Π­Ρ‚ΠΎΡ‚ сСрвСр находится Π½Π° git.team1.ourcompany.com. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² качСствС Π½ΠΎΠ²ΠΎΠΉ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ ссылки для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git remote add, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ описано Π² Π³Π»Π°Π²Π΅ ΠžΡΠ½ΠΎΠ²Ρ‹ Git. НазовитС этот ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ сСрвСр teamone β€” это имя Π±ΡƒΠ΄Π΅Ρ‚ сокращСниСм вмСсто ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ URL.

image

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git fetch teamone для получСния всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с сСрвСра teamone, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρƒ вас Π½Π΅Ρ‚ локально. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π° этом сСрвСрС Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ содСрТит сСрвСр origin, Git Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚, Π½ΠΎ создаст Π²Π΅Ρ‚ΠΊΡƒ слСТСния с ΠΈΠΌΠ΅Π½Π΅ΠΌ teamone/master, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΈ Π²Π΅Ρ‚ΠΊΠ° master Π½Π° сСрвСрС teamone.

image


ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Когда Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π²Π΅Ρ‚ΠΊΠΎΠΉ, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‘ Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ сСрвСр, Π³Π΄Π΅ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Π²Π° Π½Π° запись. Π’Π°ΡˆΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ автоматичСски Π½Π΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ β€” Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Π΅ Π²Π΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свои Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ тСматичСскиС Π²Π΅Ρ‚ΠΊΠΈ, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠ΅ΠΌ-Ρ‚ΠΎ совмСстно. Если Ρƒ вас Π΅ΡΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ° serverfix, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠ΅ΠΌ-Ρ‚ΠΎ Π΅Ρ‰Ρ‘, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‘ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹ отправляли Π²Π°ΡˆΡƒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git push <remote> <branch>:

git push origin serverfix

ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΎΠΊ

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ локальной Π²Π΅Ρ‚ΠΊΠΈ ΠΈΠ· ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ автоматичСски создаёт Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ называСтся Π²Π΅Ρ‚ΠΊΠΎΠΉ слСТСния (Π° Π²Π΅Ρ‚ΠΊΠ°, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слСдит локальная называСтся upstream branch). Π’Π΅Ρ‚ΠΊΠΈ слСТСния β€” это Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ связаны с ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ. Если, Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΠ΅ слСТСния, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git pull, Ρ‚ΠΎ Git ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ с ΠΊΠ°ΠΊΠΎΠ³ΠΎ сСрвСра ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΊΠ°ΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для слияния.

ΠŸΡ€ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ рСпозитория, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, автоматичСски создаётся Π²Π΅Ρ‚ΠΊΠ° master, которая слСдит Π·Π° origin/master. Однако, ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ отслСТиваниС ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ β€” ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… сСрвСрах ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ слСТСниС Π·Π° Π²Π΅Ρ‚ΠΊΠΎΠΉ master. Π’Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git checkout -b <branch> <remote>/<branch>. Π­Ρ‚ΠΎ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, поэтому Git прСдоставляСт ΡΠΎΠΊΡ€Π°Ρ‰Ρ‘Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ записи Π² Π²ΠΈΠ΄Π΅ Ρ„Π»Π°Π³Π° --track:

git checkout --track origin/serverfix
  Branch serverfix set up to track remote branch serverfix from origin.
  Switched to a new branch 'serverfix'

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, это Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ распространённая ΠΊΠΎΠΌΠ°Π½Π΄Π°, Ρ‡Ρ‚ΠΎ сущСствуСт сокращСниС для этого сокращСния. Если Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π²Π΅Ρ‚ΠΊΡƒ, которая Π½Π΅ сущСствуСт, Π½ΠΎ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° удалённая Π²Π΅Ρ‚ΠΊΠ° с Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‚ΠΎ Git автоматичСски создаст Π²Π΅Ρ‚ΠΊΡƒ слСТСния:

git checkout serverfix
  Branch serverfix set up to track remote branch serverfix from origin.
  Switched to a new branch 'serverfix'

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, просто ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя:

git checkout -b newname origin/serverfix
  Branch sf set up to track remote branch serverfix from origin.
  Switched to a new branch 'newname'

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ваша локальная Π²Π΅Ρ‚ΠΊΠ° newname Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ измСнСния ΠΈΠ· origin/serverfix.

Если Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ локальная Π²Π΅Ρ‚ΠΊΠ° ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΅Π΅ Π½Π° слСТСниС Π·Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ, ΠΈΠ»ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ upstream-Π²Π΅Ρ‚ΠΊΡƒ, Ρ‚ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ -u ΠΈΠ»ΠΈ --set-upstream-to для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git branch, Ρ‡Ρ‚ΠΎΠ±Ρ‹ явно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

git branch -u origin/serverfix
  Branch serverfix set up to track remote branch serverfix from origin.

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Upstream

Если Ρƒ вас настроСна отслСТиваСмая Π²Π΅Ρ‚ΠΊΠ°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сокращСний @{upstream} ΠΈΠ»ΠΈ @{u}. Π˜Ρ‚Π°ΠΊ, Ссли Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΠ΅ master ΠΈ ΠΎΠ½Π° слСдит Π·Π° origin/master, ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git merge @{u} вмСсто git merge origin/master.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρƒ вас настроСны Π²Π΅Ρ‚ΠΊΠΈ слСТСния, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -vv для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git branch. Π­Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ список Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, какая ΠΈΠ· Π²Π΅Ρ‚ΠΎΠΊ отслСТиваСтся, отстаёт, ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π΅Ρ‚ ΠΈΠ»ΠΈ всё сразу ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ отслСТиваСмой.

git branch -vv
    iss53     7e424c3 [origin/iss53: ahead 2] Add forgotten brackets
    master    1ae2a45 [origin/master] Deploy index fix
  * serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] This should do it
    testing   5ea463a Try something new

Π˜Ρ‚Π°ΠΊ, здСсь ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ наша Π²Π΅Ρ‚ΠΊΠ° iss53 слСдит Π·Π° origin/iss53 ΠΈ Β«ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π΅Ρ‚Β» Π΅Ρ‘ Π½Π° Π΄Π²Π° измСнСния β€” это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π° сСрвСр. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ наша Π²Π΅Ρ‚ΠΊΠ° master отслСТиваСт Π²Π΅Ρ‚ΠΊΡƒ origin/master ΠΈ находится Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ локальная Π²Π΅Ρ‚ΠΊΠ° serverfix слСдит Π·Π° Π²Π΅Ρ‚ΠΊΠΎΠΉ server-fix-good Π½Π° сСрвСрС teamone, ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π΅Ρ‚ Π΅Ρ‘ Π½Π° Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈ отстаСт Π½Π° ΠΎΠ΄ΠΈΠ½ β€” это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½Π° сСрвСрС Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π΅Ρ‰Ρ‘ Π½Π΅ слили, ΠΈ Ρ‚Ρ€ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π° сСрвСр. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ наша Π²Π΅Ρ‚ΠΊΠ° testing Π½Π΅ отслСТиваСт ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

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

git fetch --all; git branch -vv

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Команда git fetch ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ с сСрвСра всС измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρƒ вас Π΅Ρ‰Ρ‘ Π½Π΅Ρ‚, Π½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС вашСй Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° просто ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ позволяСт Π²Π°ΠΌ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ слияниС. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, сущСствуСт ΠΊΠΎΠΌΠ°Π½Π΄Π° git pull, которая Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв являСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git fetch, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ нСпосрСдствСнно слСдуСт ΠΊΠΎΠΌΠ°Π½Π΄Π° git merge. Если Ρƒ вас настроСна Π²Π΅Ρ‚ΠΊΠ° слСТСния ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΈΠ»ΠΈ ΠΎΠ½Π° явно установлСна, ΠΈΠ»ΠΈ ΠΎΠ½Π° Π±Ρ‹Π»Π° создана автоматичСски ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ clone ΠΈΠ»ΠΈ checkout, git pull ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ сСрвСр ΠΈ Π²Π΅Ρ‚ΠΊΡƒ, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ слСдит ваша тСкущая Π²Π΅Ρ‚ΠΊΠ°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ с этого сСрвСра ΠΈ Π·Π°Ρ‚Π΅ΠΌ попытаСтся ΡΠ»ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π»ΡƒΡ‡ΡˆΠ΅ явно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ fetch ΠΈ merge, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ магия git pull ΠΌΠΎΠΆΠ΅Ρ‚ часто ΡΠ±ΠΈΠ²Π°Ρ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ.


Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΎΠΊ Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ сСрвСрС

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π²Ρ‹ ΠΈ ваши соавторы Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ с Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΈ слили Π΅Π³ΠΎ Π² Π²Π΅Ρ‚ΠΊΡƒ master Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ сСрвСрС (ΠΈΠ»ΠΈ Π² ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π³Π΄Π΅ хранится ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄). Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ сСрвСрС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ --delete для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git push. Для удалСния Π²Π΅Ρ‚ΠΊΠΈ serverfix Π½Π° сСрвСрС, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git push origin --delete serverfix
  To https://github.com/schacon/simplegit
   - [deleted]         serverfix

Всё, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ эта строка β€” удаляСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° сСрвСрС. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Git сСрвСр Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΊΠ° Π½Π΅ запустится сборщик мусора, поэтому Ссли Π²Π΅Ρ‚ΠΊΠ° Π±Ρ‹Π»Π° ΡƒΠ΄Π°Π»Π΅Π½Π° случайно, Ρ‡Π°Ρ‰Π΅ всСго Π΅Ρ‘ Π»Π΅Π³ΠΊΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ.


ΠŸΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π’ Git Π΅ΡΡ‚ΡŒ Π΄Π²Π° способа внСсти измСнСния ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ: слияниС ΠΈ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

image

Как ΠΌΡ‹ выяснили Ρ€Π°Π½Π΅Π΅, ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ слияниС Π΄Π²ΡƒΡ… Π²Π΅Ρ‚ΠΎΠΊ β€” это ΠΊΠΎΠΌΠ°Π½Π΄Π° merge. Она осущСствляСт трёхстороннСС слияниС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя послСдними снимками сливаСмых Π²Π΅Ρ‚ΠΎΠΊ (C3 ΠΈ C4) ΠΈ самого Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ для этих Π²Π΅Ρ‚ΠΎΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ снимка (C2), создавая Π½ΠΎΠ²Ρ‹ΠΉ снимок (ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚)

image

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·ΡΡ‚ΡŒ Ρ‚Π΅ измСнСния, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ прСдставлСны Π² C4, ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ²Π΅Ρ€Ρ… C3. Π’ Git это называСтся ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ rebase Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·ΡΡ‚ΡŒ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΈ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΏΠΎΠ²Π΅Ρ€Ρ….
Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠΌΡΡ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ experiment ΠΈ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Ρ‘ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π΅Ρ‚ΠΊΠΈ master ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

git checkout experiment
git rebase master
  First, rewinding head to replay your work on top of it...
  Applying: added staged command

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

image

ПослС этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ слияниС ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΎΠΉ.

git checkout master
git merge experiment

image

Π’Π΅ΠΏΠ΅Ρ€ΡŒ снимок, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ C4' Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π» C5 Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с трёхсторонним слияниСм. НСт Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρ‡ΠΈΡ‰Π΅.

Если Π²Ρ‹ взглянСтС Π½Π° ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° выглядит Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ: Π±ΡƒΠ΄Ρ‚ΠΎ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Ссли ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π»ΠΈΡΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π²Π΅Ρ‚ΠΊΠ°Ρ….

Часто Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ для увСрСнности, Ρ‡Ρ‚ΠΎ ваши ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ бСсконфликтно слиты Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, ΠΊΡƒΠ΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ внСсти Π²ΠΊΠ»Π°Π΄, Π½ΠΎ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ. Π’ этом случаС Π²Π°ΠΌ слСдуСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² своСй Π²Π΅Ρ‚ΠΊΠ΅ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎΠ²Π΅Ρ€Ρ… origin/master, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свои измСнСния Π² основной ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π’ΠΎΠ³Π΄Π° Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π΅ придётся Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ лишнСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ β€” всё Ρ€Π΅ΡˆΠΈΡ‚ΡΡ простой ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΎΠΉ ΠΈΠ»ΠΈ бСсконфликтным слияниСм.

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


ΠžΠΏΠ°ΡΠ½ΠΎΡΡ‚ΠΈ пСрСмСщСния

Но Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡ€ΠΈ всСх своих достоинствах, Π½Π΅ лишСно нСдостатков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ строчкой:
НС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΡƒΠΆΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ

Если Π²Ρ‹ рассматриваСтС ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ способ навСдСния порядка ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ локально Π΄ΠΎ ΠΈΡ… ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠ»ΠΈ ваши ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ доступны ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ β€” Ρƒ вас всё Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Однако, Ссли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΈ Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… людСй основываСтся Π½Π° этих ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ…, Ρ‚ΠΎ ваши дСйствия ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ сущСствСнныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π° Π²Ρ‹ β€” Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π·Ρ€Π΅Π½ΠΈΠ΅ вашСй ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.


ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ vs. БлияниС

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² вашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ β€” это запись Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Π­Ρ‚ΠΎ историчСский Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Ρ†Π΅Π½Π½Ρ‹ΠΉ сам ΠΏΠΎ сСбС, ΠΈ Π΅Π³ΠΎ нСльзя ΠΏΠΎΠ΄Π΄Π΅Π»Ρ‹Π²Π°Ρ‚ΡŒ. Π‘ этой Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² практичСски кощунствСнно; Π²Ρ‹ Π»ΠΆΡ‘Ρ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

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



К оглавлСнию

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹

Git ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ сСтСвыми ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…: Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ, HTTP, Secure Shell (SSH) ΠΈ Git.


Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»

Если Ρƒ вас смонтирована общая файловая систСма, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ измСнСния ΠΈΠ· локального рСпозитория. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² качСствС ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ Π² качСствС URL. НапримСр, для клонирования локального рСпозитория Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

git clone /srv/git/project.git

Или этого:

git clone file:///srv/git/project.git

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

git remote add local_proj /srv/git/project.git

НСдостаток этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ доступ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ слоТнСС Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… мСст, Ρ‡Π΅ΠΌ простой сСтСвой доступ.


ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ HTTP

Новая вСрсия часто называСтся Π£ΠΌΠ½Ρ‹ΠΌ (Smart) HTTP, Π° старая Π’ΡƒΠΏΡ‹ΠΌ (Dumb) HTTP. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ рассмотрим Π£ΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ».


Π£ΠΌΠ½Ρ‹ΠΉ HTTP

Π£ΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» HTTP ΠΏΠΎΠ²Π΅Ρ€Ρ… стандартных HTTP/S ΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ HTTP, это часто ΠΏΡ€ΠΎΡ‰Π΅ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‡Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ SSH, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠΎ Π»ΠΎΠ³ΠΈΠ½Ρƒ/ΠΏΠ°Ρ€ΠΎΠ»ΡŽ вмСсто установки SSH-ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. НавСрноС, сСйчас ΠΎΠ½ стал Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярным способом использования Git, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ для Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ доступа ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» git://, ΠΈ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» SSH. ВмСсто использования Ρ€Π°Π·Π½Ρ‹Ρ… адрСсов URL для этих Ρ†Π΅Π»Π΅ΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ URL адрСс для всСго. Если Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΡ‚ΠΎΡΠ»Π°Ρ‚ΡŒ измСнСния ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΈ Π΅ΡΡ‚ΡŒ), сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ. Π’ΠΎ ΠΆΠ΅ касаСтся ΠΈ доступа Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅. На самом Π΄Π΅Π»Π΅ для сСрвисов Π²Ρ€ΠΎΠ΄Π΅ GitHub, адрСс URL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для просмотра рСпозитория Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, https://github.com/schacon/simplegit), ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для клонирования ΠΈΠ»ΠΈ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ доступ, для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.


Π’ΡƒΠΏΠΎΠΉ HTTP

Если сСрвСр Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° ΡƒΠΌΠ½Ρ‹ΠΉ запрос Git ΠΏΠΎ HTTP, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Git попытаСтся ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ простой Π’ΡƒΠΏΠΎΠΉ HTTP-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». Π’ΡƒΠΏΠΎΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π³ΠΎΠ»Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π²Π΅Π±-сСрвСром ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠŸΡ€Π΅Π»Π΅ΡΡ‚ΡŒ Ρ‚ΡƒΠΏΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° HTTP β€” Π² простотС настройки. По сути, всё, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ β€” ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π³ΠΎΠ»Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ HTTP ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ post-update (смотри Π₯ΡƒΠΊΠΈ Π² Git). Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Ссли ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ Π²Π΅Π±-сСрвСру, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π±Ρ‹Π» Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ доступ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ посрСдством HTTP, Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ этого:

cd /var/www/htdocs/
git clone --bare /path/to/git_project gitproject.git
cd gitproject.git
mv hooks/post-update.sample hooks/post-update
chmod a+x hooks/post-update

Π’ΠΎΡ‚ ΠΈ всё. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ post-update, входящий Π² состав Git ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, выполняСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ (git update-server-info), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ HTTP Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° выполняСтся, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ отправляСтС измСнСния Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ посрСдством SSH); Π·Π°Ρ‚Π΅ΠΌ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ

git clone https://example.com/gitproject.git

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» SSH

Часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ транспортный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» для ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ хостинга Git β€” это SSH. SSH β€” ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» с Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ.
Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΠΎ SSH, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ прСфикс ssh:// Π² URL, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

git clone ssh://[user@]server/project.git

Или ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° SSH ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ синтаксис Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ scp:

git clone [user@]server:project.git

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Git Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ вошли Π² систСму.


Git-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» β€” Git-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». ВмСстС с Git поставляСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π΅ΠΌΠΎΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ 9418 ΠΈ прСдоставляСт сСрвис, схоТий с ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ SSH, Π½ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π±Π΅Π· Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Git-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» для рСпозитория, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» git-export-daemon-ok, ΠΈΠ½Π°Ρ‡Π΅ Π΄Π΅ΠΌΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этим Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ, Π½ΠΎ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ срСдства бСзопасности. БоотвСтствСнно, любой Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² Git ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ доступСн для клонирования всСм, Π»ΠΈΠ±ΠΎ Π½Π΅Ρ‚. Как слСдствиС, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ измСнСния ΠΏΠΎ этому ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ нСльзя. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ доступ Π½Π° запись, Π½ΠΎ ΠΈΠ·-Π·Π° отсутствия Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² этом случаС ΠΊΡ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, зная URL вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, смоТСт Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, это Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.

Достоинства
Git-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ― часто самый быстрый ΠΈΠ· доступных ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ². Если Ρƒ вас ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ доступом ΠΈ большой Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, ΠΈΠ»ΠΈ Ρƒ вас ΠΎΡ‡Π΅Π½ΡŒ большой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ трСбуСтся аутСнтификация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ для чтСния, Π²Π°ΠΌ стоит Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅ΠΌΠΎΠ½ Git для вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» SSH, Π½ΠΎ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ.

НСдостатки
НСдостатком Git-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° являСтся отсутствиС Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ



К оглавлСнию

РаспрСдСлСнный Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс

ЦСнтрализованная Ρ€Π°Π±ΠΎΡ‚Π°

Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ…Π°Π± ΠΈΠ»ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π½ΠΈΠΌ. ВсС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠ·Π»Π°ΠΌΠΈ (ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Ρ…Π°Π±Π°) ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π½ΠΈΠΌ.

image

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

Достаточно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ‡Π»Π΅Π½Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ push-доступ; Git Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ измСнСния, сдСланныС Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ.

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


ДиспСтчСр ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ

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

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

1. Π‘ΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° отправляСт измСнСния Π² свой ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
2. Участник ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ этот Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ вносит измСнСния.
3. Участник отправляСт свои измСнСния Π² свой ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
4. Участник отправляСт письмо ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΌΡƒ с запросом Π½Π° слияниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
5. Π‘ΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ добавляСт Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ участника ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΈ сливаСт измСнСния локально.
6. Π‘ΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ отправляСт слитыС измСнСния Π² основной Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

image


Π”ΠΈΠΊΡ‚Π°Ρ‚ΠΎΡ€ ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΈ

Π­Ρ‚ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса с использованиСм Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π². Π’ основном Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Π½Π°ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… сотни участников; самый извСстный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” ядро Linux. ΠŸΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΈ (lieutenants) β€” это ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ части рСпозитория. Над Π½ΠΈΠΌΠΈ главСнствуСт ΠΎΠ΄ΠΈΠ½ диспСтчСр ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π²Π΅Π»ΠΈΠΊΠΎΠ΄ΡƒΡˆΠ½Ρ‹ΠΌ Π΄ΠΈΠΊΡ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ. Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π΄ΠΈΠΊΡ‚Π°Ρ‚ΠΎΡ€Π° выступаСт ΠΊΠ°ΠΊ эталонный (blessed), ΠΎΡ‚ΠΊΡƒΠ΄Π° всС участники процСсса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ измСнСния. ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

1. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² своих тСматичСских Π²Π΅Ρ‚ΠΊΠ°Ρ… ΠΈ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π΅Ρ‚ΠΊΠΈ `master`. Π’Π΅Ρ‚ΠΊΠ° `master` β€” это Π²Π΅Ρ‚ΠΊΠ° эталонного рСпозитория Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠΌΠ΅Π΅Ρ‚ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΈΠΊΡ‚Π°Ρ‚ΠΎΡ€.
2. ΠŸΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΈ ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ тСматичСскиС Π²Π΅Ρ‚ΠΊΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π² свои Π²Π΅Ρ‚ΠΊΠΈ `master`
3. Π”ΠΈΠΊΡ‚Π°Ρ‚ΠΎΡ€ сливаСт Π²Π΅Ρ‚ΠΊΠΈ `master` ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΎΠ² Π² свою Π²Π΅Ρ‚ΠΊΡƒ `master`.
4. НаконСц, Π΄ΠΈΠΊΡ‚Π°Ρ‚ΠΎΡ€ отправляСт свою Π²Π΅Ρ‚ΠΊΡƒ `master` Π² эталонный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° основании Π½Π΅Ρ‘.

image


УчастиС Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅

ΠŸΡ€Π°Π²ΠΈΠ»Π° создания ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

Для Π½Π°Ρ‡Π°Π»Π°, Π²Π°ΠΌ Π½Π΅ слСдуСт ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. Git прСдоставляСт простой способ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ β€” ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git diff --check, которая Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ список Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ².

ΠŸΠΈΡˆΠΈΡ‚Π΅ сообщСниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π΅: Β«Fix bugΒ» Π° Π½Π΅ Β«Fixed bugΒ» ΠΈΠ»ΠΈ Β«Fixes bugΒ».

Π’ΠΎΡ‚ шаблон Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ сообщСния ΠΊΠΎΠΌΠΌΠΈΡ‚Π°:

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ (Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 50 символов) Ρ€Π΅Π·ΡŽΠΌΠ΅ с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹
Π‘ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ, ΠΏΠΎΡΡΠ½ΡΡŽΡ‰ΠΈΠΉ тСкст, Ссли ΠΎΠ½ трСбуСтся.     
Π‘Ρ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ строки Π² 72 символа.        
Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях пСрвая строка подразумСваСтся ΠΊΠ°ΠΊ Ρ‚Π΅ΠΌΠ° письма, Π° всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ -- ΠΊΠ°ΠΊ Ρ‚Π΅Π»ΠΎ письма.        
ΠŸΡƒΡΡ‚Π°Ρ строка, ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ сводку ΠΎΡ‚ Ρ‚Π΅Π»Π°, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ 
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случаСв, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ описания 
Π½Π΅Ρ‚); Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Ρ‚Π°ΠΊΠΈΠ΅ инструмСнты, ΠΊΠ°ΠΊ rebase, ΠΌΠΎΠ³ΡƒΡ‚ 
вас Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ.      

БообщСния ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² слСдуСт ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ Π³Π»Π°Π³ΠΎΠ»Π° ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°
ΠΏΠΎΠ²Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ наклонСния: Β«Fix bugΒ» (Π˜ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±Π°Π³).
Π­Ρ‚ΠΎ соглашСниС соотвСтствуСт сообщСниям ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², 
Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, ΠΊΠ°ΠΊ `git merge` ΠΈ `git revert`.

ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π°Π±Π·Π°Ρ†Ρ‹ ΠΈΠ΄ΡƒΡ‚ послС пустых строк.

- Π”ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ обозначСния ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² списка

- ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, элСмСнты списка ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΈΡ€Π΅ ΠΈΠ»ΠΈ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠΈ, с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ, Π° 
Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ пустой строкой, Π½ΠΎ соглашСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ

- ДопускаСтся ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π°Π±Π·Π°Ρ†Π½Ρ‹ΠΉ отступ.

НСбольшая команда

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

# ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π”ΠΆΠΎΠ½Π°
git clone john@githost:simplegit.git
Cloning into 'simplegit'...
...
cd simplegit/
vim lib/simplegit.rb
git commit -am 'Remove invalid default value' [master 738ee87] Remove invalid default value
   1 files changed, 1 insertions(+), 1 deletions(-)

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ДТСссика Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС β€” ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚:

# ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ДТСссики
git clone jessica@githost:simplegit.git Cloning into 'simplegit'...
...
cd simplegit/
vim TODO
git commit -am 'Add reset task'
[master fbff5bc] Add reset task
   1 files changed, 1 insertions(+), 0 deletions(-)

Π—Π°Ρ‚Π΅ΠΌ ДТСссика отправляСт измСнСния Π½Π° сСрвСр:

# ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ДТСссики
git push origin master
...
To jessica@githost:simplegit.git
     1edee6b..fbff5bc  master -> master

Π”ΠΆΠΎΠ½ вносит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния, Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈ пытаСтся ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ сСрвСр:

# ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π”ΠΆΠΎΠ½Π°
git push origin master
To john@githost:simplegit.git
   ! [rejected]        master -> master (non-fast forward)
  error: failed to push some refs to 'john@githost:simplegit.git'

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС измСнСния Π”ΠΆΠΎΠ½Π° ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ДТСссика ΡƒΠΆΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»Π° свои. Π’ Git Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΡΠ»ΠΈΡ‚ΡŒ измСнСния локально. Π”ΠΆΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ измСнСния ДТСссики ΠΈ ΡΠ»ΠΈΡ‚ΡŒ ΠΈΡ… локально, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ смоТСт ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свои. Для Π½Π°Ρ‡Π°Π»Π°, Π”ΠΆΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ измСнСния ДТСссики (слияния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ Π½Π΅ происходит):

git fetch origin
  ...
  From john@githost:simplegit
   + 049d078...fbff5bc master     -> origin/master

Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π”ΠΆΠΎΠ½Π° выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

image

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π”ΠΆΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ измСнСния ДТСссики со своСй локальной Π²Π΅Ρ‚ΠΊΠΎΠΉ:

git merge origin/master
  Merge made by the 'recursive' strategy.
   TODO |    1 +
   1 files changed, 1 insertions(+), 0 deletions(-)

ΠŸΡ€ΠΎΡ†Π΅ΡΡ слияния ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π³Π»Π°Π΄ΠΊΠΎ β€” история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρƒ Π”ΠΆΠΎΠ½Π° выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

image

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π”ΠΆΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹Π΅ измСнСния Π½Π° сСрвСр:

git push origin master
  ...
  To john@githost:simplegit.git
     fbff5bc..72bbc59  master -> master

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρƒ Π”ΠΆΠΎΠ½Π° выглядит Ρ‚Π°ΠΊ:

image

Π’Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ДТСссика создала Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ issue54 ΠΈ сдСлала Π² Π½Π΅ΠΉ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π’Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ДТСссика создала Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ issue54 ΠΈ сдСлала Π² Π½Π΅ΠΉ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Она Π΅Ρ‰Ρ‘ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° измСнСния Π”ΠΆΠΎΠ½Π°, поэтому история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρƒ Π½Π΅Ρ‘ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

image

Π’Π½Π΅Π·Π°ΠΏΠ½ΠΎ ДТСссика ΡƒΠ·Π½Π°Ρ‘Ρ‚, Ρ‡Ρ‚ΠΎ Π”ΠΆΠΎΠ½ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ измСнСния Π½Π° сСрвСр ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½Π° Ρ…ΠΎΡ‡Π΅Ρ‚ Π½Π° Π½ΠΈΡ… Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ; для этого Π΅ΠΉ слСдуСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с сСрвСра всС Π½ΠΎΠ²Ρ‹Π΅ измСнСния:

# ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ДТСссики
$ git fetch origin
...
From jessica@githost:simplegit
     fbff5bc..72bbc59  master     -> origin/master

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π”ΠΆΠΎΠ½ΠΎΠΌ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρƒ ДТСссики выглядит Ρ‚Π°ΠΊ:

image

ДТСссика считаСт, Ρ‡Ρ‚ΠΎ Π΅Ρ‘ тСматичСская Π²Π΅Ρ‚ΠΊΠ° Π³ΠΎΡ‚ΠΎΠ²Π°, Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ…ΠΎΡ‡Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ измСнСния слСдуСт ΡΠ»ΠΈΡ‚ΡŒ со своСй Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π½Π° сСрвСр. Для прояснСния ситуации ΠΎΠ½ выполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git log:

git log --no-merges issue54..origin/master
  commit 738ee872852dfaa9d6634e0dea7a324040193016
  Author: John Smith <[email protected]>
  Date:   Fri May 29 16:01:27 2009 -0700
     Remove invalid default value

issue54..origin/master β€” это синтаксис Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Git ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ список ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² послСднСй Π²Π΅Ρ‚ΠΊΠ΅ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС origin/master), Π½ΠΎ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС issue54). Π‘ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ этот синтаксис рассматриваСтся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π³Π»Π°Π²Ρ‹ 7.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚, сдСланный Π”ΠΆΠΎΠ½ΠΎΠΌ ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ слитый ДТСссикой. Если ΠΎΠ½Π° ΡΠΎΠ»ΡŒΡ‘Ρ‚ origin/master, Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ СдинствСнный ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ локальноС состояниС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ДТСссика ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΈΡ‚ΡŒ измСнСния тСматичСской Π²Π΅Ρ‚ΠΊΠΈ ΠΈ измСнСния Π”ΠΆΠΎΠ½Π° (origin/master) Π² свою Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ master, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‘ Π½Π° сСрвСр.
Для Π½Π°Ρ‡Π°Π»Π° (ΠΏΡ€ΠΈ условии отсутствия ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² тСматичСской Π²Π΅Ρ‚ΠΊΠ΅, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠΌΠΈΡ‚), ДТСссика ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° свою Π²Π΅Ρ‚ΠΊΡƒ master:

git checkout master
  Switched to branch 'master'
  Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.

ОбС Π²Π΅Ρ‚ΠΊΠΈ origin/master ΠΈ issue54 ΡΠ²Π»ΡΡŽΡ‚ΡΡ отслСТиваСмыми, поэтому порядок слияния Π½Π΅ Π²Π°ΠΆΠ΅Π½. ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌ Π²Π½Π΅ зависимости ΠΎΡ‚ порядка слияния, ΠΎΠ΄Π½Π°ΠΊΠΎ история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. ДТСссика Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΡΠ»ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ issue54 ΠΏΠ΅Ρ€Π²ΠΎΠΉ:

 git merge issue54
  Updating fbff5bc..4af4298
  Fast forward
README | 1+
lib/simplegit.rb | 6 +++++-
2 files changed, 6 insertions(+), 1 deletions(-)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚; ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, это простоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π²ΠΏΠ΅Ρ€Π΅Π΄. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ДТСссика Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ процСсс локального слияния объСдиняя ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ измСнСния Π”ΠΆΠΎΠ½Π°, находящиСся Π² Π²Π΅Ρ‚ΠΊΠ΅ origin/master:

git merge origin/master
  Auto-merging lib/simplegit.rb
  Merge made by the 'recursive' strategy.
   lib/simplegit.rb |    2 +-
   1 files changed, 1 insertions(+), 1 deletions(-)

БлияниС ΠΏΡ€ΠΎΡˆΠ»ΠΎ чисто ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρƒ ДТСссики выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

image

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ДТСссика ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свою Π²Π΅Ρ‚ΠΊΡƒ master Π² origin/master, ΠΏΡ€ΠΈ условии Ρ‡Ρ‚ΠΎ Π”ΠΆΠΎΠ½ большС Π½Π΅ отправлял ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

git push origin master
  ...
  To jessica@githost:simplegit.git
     72bbc59..8059c15  master -> master

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сдСлал ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ нСсколько Ρ€Π°Π· ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ слил измСнСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

image

Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² тСматичСской Π²Π΅Ρ‚ΠΊΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ сливаСтС измСнСния Π² Π²Π΅Ρ‚ΠΊΡƒ master ΠΊΠΎΠ³Π΄Π° всё Π³ΠΎΡ‚ΠΎΠ²ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ, Π²Ρ‹ сливаСтС Π΅Ρ‘ Π² Π²Π°ΡˆΡƒ Π²Π΅Ρ‚ΠΊΡƒ master, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΈ сливаСтС измСнСния ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ origin/master Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ, ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ†, отправляСтС всС измСнСния Π² Π²Π΅Ρ‚ΠΊΡƒ master Π½Π° сСрвСрС.

image


Команда с Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ

Π’ этом сцСнарии ΠΌΡ‹ рассмотрим Ρ€ΠΎΠ»ΠΈ участников Π² Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΉ частной ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, Π³Π΄Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ совмСстно Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°Π΄ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡΠΌΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡ… Π²ΠΊΠ»Π°Π΄ интСгрируСтся Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ стороной.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π”ΠΆΠΎΠ½ ΠΈ ДТСссика вмСстС Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°Π΄ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ (Π½Π°Π·ΠΎΠ²Ρ‘ΠΌ Π΅Ρ‘ featureA), ΠΏΡ€ΠΈ этом ДТСссика ΠΈ Π”ΠΆΠΎΠ·ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΎΠΉ (featureB). Π’ этом случаС компания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса с ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΏΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏ интСгрируСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌΠΈ, Π° Π²Π΅Ρ‚ΠΊΠ° master основного рСпозитория ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этими ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌΠΈ. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ сцСнарии вся Ρ€Π°Π±ΠΎΡ‚Π° вСдётся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚ΠΊΠ°Ρ… для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ΡΡ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс ДТСссики, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ двумя функциями, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ сотрудничая с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΡƒΠΆΠ΅ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ ΠΎΠ½Π° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сначала Π½Π°Π΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ featureA. ДТСссика создаёт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ Π½Π΅ΠΉ:

# ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ДТСссики
git checkout -b featureA
Switched to a new branch 'featureA'
vim lib/simplegit.rb
git commit -am 'Add limit to log function' [featureA 3300904] Add limit to log function
   1 files changed, 1 insertions(+), 1 deletions(-)

Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с Π”ΠΆΠΎΠ½ΠΎΠΌ, поэтому ДТСссика отправляСт Π²Π΅Ρ‚ΠΊΡƒ featureA Π½Π° сСрвСр. Π£ ДТСссики Π½Π΅Ρ‚ доступа Π½Π° запись Π² Π²Π΅Ρ‚ΠΊΡƒ master (ΠΎΠ½ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²), поэтому для совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π”ΠΆΠΎΠ½ΠΎΠΌ ΠΎΠ½Π° отправляСт измСнСния Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ:

git push -u origin featureA
  ...
  To jessica@githost:simplegit.git
   * [new branch]      featureA -> featureA

ДТСссика отправляСт письмо Π”ΠΆΠΎΠ½Ρƒ с ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ внСсённыС Π΅ΠΉ измСнСния ΡƒΠΆΠ΅ доступны Π² Π²Π΅Ρ‚ΠΊΠ΅ featureA. Пока ДТСссика ΠΆΠ΄Ρ‘Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ Π”ΠΆΠΎΠ½Π°, ΠΎΠ½Π° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ featureB вмСстС с Π”ΠΆΠΎΠ·ΠΈ. Для Π½Π°Ρ‡Π°Π»Π°, ДТСсика создаёт Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π±Π°Π·ΠΈΡ€ΡƒΡΡΡŒ Π½Π° состоянии Π²Π΅Ρ‚ΠΊΠΈ master Π½Π° сСрвСрС:

# ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ДТСссики
git fetch origin
git checkout -b featureB origin/master Switched to a new branch 'featureB'

ПослС этого, ДТСссика Π΄Π΅Π»Π°Π΅Ρ‚ нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Π²Π΅Ρ‚ΠΊΠ΅ featureB:

vim lib/simplegit.rb
git commit -am 'Make ls-tree function recursive'
  [featureB e5b0fdc] Make ls-tree function recursive
   1 files changed, 1 insertions(+), 1 deletions(-)
vim lib/simplegit.rb
git commit -am 'Add ls-files'
  [featureB 8512791] Add ls-files
   1 files changed, 5 insertions(+), 0 deletions(-)

image

ДТСссика Π³ΠΎΡ‚ΠΎΠ²Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ письмо Π”ΠΆΠΎΠ·ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° ΡƒΠΆΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π½Π° сСрвСр Π² Π²Π΅Ρ‚ΠΊΡƒ featureBee. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ДТСссикС Π½ΡƒΠΆΠ½ΠΎ ΡΠ»ΠΈΡ‚ΡŒ эти измСнСния со своими ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π½Π° сСрвСр. ИзмСнСния Π”ΠΆΠΎΠ·ΠΈ ΠΎΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git fetch:

  $ git fetch origin
  ...
  From jessica@githost:simplegit
   * [new branch]      featureBee -> origin/featureBee

Полагая Ρ‡Ρ‚ΠΎ ДТСссика находится Π² Π²Π΅Ρ‚ΠΊΠ΅ featureB, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ измСнСния Π”ΠΆΠΎΠ·ΠΈ со своими ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git merge:

git merge origin/featureBee
  Auto-merging lib/simplegit.rb
  Merge made by the 'recursive' strategy.
   lib/simplegit.rb |    4 ++++
   1 files changed, 4 insertions(+), 0 deletions(-)

Одна нСбольшая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” Π΅ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ слитыС измСнСния ΠΈΠ· локальной Π²Π΅Ρ‚ΠΊΠΈ featureB Π² Π²Π΅Ρ‚ΠΊΡƒ featureBee Π½Π° сСрвСрС. Для этого Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git push ДТСссика ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ названия локальной ΠΈ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΎΠΊ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ:

git push -u origin featureB:featureBee
  ...
  To jessica@githost:simplegit.git
     fba9af8..cd685d1  featureB -> featureBee

Π­Ρ‚ΠΎ называСтся спСцификация ссылок. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ссылок Π³Π»Π°Π²Ρ‹ 10 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ описаниС спСцификаций ссылок Git ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы ΠΈΡ… использования. Π’Π°ΠΊ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ„Π»Π°Π³ -u; это сокращСниС для --set-upstream, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ настраиваСт Π²Π΅Ρ‚ΠΊΠΈ для упрощСния ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈ получСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² дальнСйшСм.

ПослС этого, ДТСссика ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ письмо ΠΎΡ‚ Π”ΠΆΠΎΠ½Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ сообщаСт, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния Π² Π²Π΅Ρ‚ΠΊΡƒ featureA ΠΈ просит ΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ. ДТСсика выполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git fetch для получСния всСх Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ измСнСния Π”ΠΆΠΎΠ½Π°:

git fetch origin
  ...
  From jessica@githost:simplegit
     3300904..aad881d  featureA   -> origin/featureA

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΡƒΡ‚Ρ‘ΠΌ сравнСния ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ featureA со своСй локальной Π²Π΅Ρ‚ΠΊΠΎΠΉ:

git log featureA..origin/featureA
  commit aad881d154acdaeb2b6b18ea0e827ed8a6d671e6
  Author: John Smith <[email protected]>
  Date:   Fri May 29 19:57:33 2009 -0700
      Increase log output to 30 from 25

Если ДТСссику всё устраиваСт, Ρ‚ΠΎ ΠΎΠ½Π° сливаСт измСнСния Π”ΠΆΠΎΠ½Π° Π² свою Π²Π΅Ρ‚ΠΊΡƒ featureA:

git checkout featureA
  Switched to branch 'featureA'
git merge origin/featureA
  Updating 3300904..aad881d
  Fast forward
   lib/simplegit.rb |   10 +++++++++-
  1 files changed, 9 insertions(+), 1 deletions(-)

ДТСссика Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² локальной Π²Π΅Ρ‚ΠΊΠ΅ featureA ΠΈ отправляСт ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° сСрвСр:

git commit -am 'Add small tweak to merged content'
  [featureA 774b3ed] Add small tweak to merged content
   1 files changed, 1 insertions(+), 1 deletions(-)
git push
  ...
  To jessica@githost:simplegit.git
     3300904..774b3ed  featureA -> featureA

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρƒ ДТСссики выглядит Ρ‚Π°ΠΊ:

image

ДТСссика, Π”ΠΆΠΎΠ·ΠΈ ΠΈ Π”ΠΆΠΎΠ½ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‚ΠΊΠΈ featureA ΠΈ featureBee Π½Π° сСрвСрС Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ слиянию Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΡΠΎΠ»ΡŒΡŽΡ‚ эти Π²Π΅Ρ‚ΠΊΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ измСнСния Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния, Π° история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄:

image

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΏΠΏ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Π²Π΅Ρ‚ΠΊΠ°Ρ… Π±Π΅Π· нСобходимости Π²ΠΎΠ²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ всСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ β€” ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ прСимущСство Git.

image


Π€ΠΎΡ€ΠΊ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

УчастиС Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ сильно отличаСтся. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ вас Π½Π΅Ρ‚ доступа ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ слСдуСт Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ рассматриваСтся участиС Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ посрСдством Ρ„ΠΎΡ€ΠΊΠ° Π½Π° Git ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ простоС созданиС.

Для Π½Π°Ρ‡Π°Π»Π°, Π²Π°ΠΌ слСдуСт ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ основной Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Π½Π΅ΠΉ.

git clone <url>
cd project
git checkout -b featureA
    ... work ...
git commit
    ... work ...
git commit

Когда Ρ€Π°Π±ΠΎΡ‚Π° Π² тСматичСской Π²Π΅Ρ‚ΠΊΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° ΠΈ Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ измСнСния исходному ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу исходного ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Fork, Ρ‚Π΅ΠΌ самым создавая доступный для записи Ρ„ΠΎΡ€ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π—Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ URL Π½Π° созданный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π² нашСм случаС с ΠΈΠΌΠ΅Π½Π΅ΠΌ myfork:

git remote add myfork <url>

ПослС этого слСдуСт ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Π½Π΅Π³ΠΎ. ΠŸΡ€ΠΎΡ‰Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ вСлась Ρ€Π°Π±ΠΎΡ‚Π°, Ρ‡Π΅ΠΌ ΡΠ»ΠΈΠ²Π°Ρ‚ΡŒ измСнСния Π² Π²Π°ΡˆΡƒ Π²Π΅Ρ‚ΠΊΡƒ master ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΅Ρ‘. Если ваши измСнСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Ρ‹ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ (ΠΊΠΎΠΌΠ°Π½Π΄Π° cherry-pick Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ рассматриваСтся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π‘Ρ…Π΅ΠΌΠ° с ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΡ‚Π±ΠΎΡ€ΠΎΠΌ Π³Π»Π°Π²Ρ‹ 5), Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ смоТСтС Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ состояниС вашСй Π²Π΅Ρ‚ΠΊΠΈ master. Если ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΡΠΎΠ»ΡŒΡ‘Ρ‚, ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ ваши измСнСния, Ρ‚ΠΎ Π²Ρ‹ смоТСтС ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСпозитория.

ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свои измСнСния Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

git push -u myfork featureA

Когда ваши измСнСния ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π² ваш Ρ„ΠΎΡ€ΠΊ, слСдуСт ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΡ‚ΡŒ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… исходного ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ измСнСния для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, это называСтся запросом слияния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ°ΠΊ Π²Π΅Π± сайт β€” GitHub ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ собствСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ запросов слияния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π² Π³Π»Π°Π²Π΅ GitHub β€” Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git request-pull, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ² Π΅Ρ‘ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎ ΠΏΠΎΡ‡Ρ‚Π΅.

Команда git request-pull ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ слСдуСт Π²Π»ΠΈΡ‚ΡŒ измСнСния ΠΈΠ· вашСй тСматичСской Π²Π΅Ρ‚ΠΊΠΈ, ΠΈ ссылку Π½Π° Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ измСнСния, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ список всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚Π΅ внСсти. НапримСр, Ссли ДТСссика Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π”ΠΆΠΎΠ½Ρƒ запрос слияния ΠΈ ΠΎΠ½Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»Π° Π΄Π²Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Ρ‚ΠΎ Π΅ΠΉ слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git request-pull origin/master myfork
  The following changes since commit 1edee6b1d61823a2de3b09c160d7080b8d1b3a40:
  Jessica Smith (1):
          Create new function
  are available in the git repository at:
    git://githost/simplegit.git featureA
  Jessica Smith (2):
        Add limit to log function
        Increase log output to 30 from 25
   lib/simplegit.rb |   10 +++++++++-
   1 files changed, 9 insertions(+), 1 deletions(-)

Π’Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° β€” Π² Π½Ρ‘ΠΌ говорится с ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° вСлась Ρ€Π°Π±ΠΎΡ‚Π°, приводится сводка ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ указываСтся ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ эти измСнСния.

Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Π³Π΄Π΅ Π²Ρ‹ Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΌ, ΠΏΡ€ΠΎΡ‰Π΅ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ master Π² соотвСтствии с origin/master, Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² тСматичСских Π²Π΅Ρ‚ΠΊΠ°Ρ… β€” Ρ‚Π°ΠΊ Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ измСнСния, Ссли ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Ρ‹. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π²Π΅Ρ‚ΠΊΠ°ΠΌ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° состояниС основного рСпозитория измСнится, Π° ваши ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΡƒΠΆΠ΅ Π½Π΅ смогут Π±Ρ‹Ρ‚ΡŒ чисто ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹. НапримСр, Ссли Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ исправлСния Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ, Π½Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ тСматичСской Π²Π΅Ρ‚ΠΊΠ΅ β€” создайтС Π½ΠΎΠ²ΡƒΡŽ, Π±Π°Π·ΠΈΡ€ΡƒΡΡΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΠ΅ master основного рСпозитория:

git checkout -b featureB origin/master
    ... work ...
git commit
git push myfork featureB
git request-pull origin/master myfork
    ... email generated request pull to maintainer ...
git fetch origin

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, каТдая ΠΈΠ· Π²Π°ΡˆΠΈΡ… Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π° β€” Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ β€” ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±Π΅Π· влияния Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ.

image

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° слил Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ, Π° Π·Π°Ρ‚Π΅ΠΌ пытаСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π½ΠΎ ΠΎΠ½Π° ΡƒΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слита Π±Π΅Π· ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ². Π’ этом случаС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свою Π²Π΅Ρ‚ΠΊΡƒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ origin/master, Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свои измСнСния:

git checkout featureA
git rebase origin/master
git push -f myfork featureA

Π­Ρ‚ΠΈ дСйствия ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΡƒΡ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², которая станСт ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² послС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ featureA.

image

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π²Π΅Ρ‚ΠΊΡƒ, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ -f Π²ΠΎ врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π½Π° сСрвСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π²Π΅Ρ‚ΠΊΠΈ featureA ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ Π΅Ρ‘ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° этих исправлСний Π² Π²Π΅Ρ‚ΠΊΡƒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, featureAv2).

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ сцСнарий: ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ посмотрСл Π²Π°ΡˆΡƒ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ Π΅ΠΌΡƒ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ идСя, Π½ΠΎ ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ вас ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту Π²Π΅Ρ‚ΠΊΡƒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния Π²Π΅Ρ‚ΠΊΠΈ master. Π’Ρ‹ создаётС Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π±Π°Π·ΠΈΡ€ΡƒΡΡΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ origin/master, сбрасываСтС всС измСнСния Π² Π½Π΅Ρ‘, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, Π΄Π΅Π»Π°Π΅Ρ‚Π΅ измСнСния Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ отправляСтС Π΅Ρ‘ ΠΊΠ°ΠΊ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ:

git checkout -b featureBv2 origin/master
git merge --squash featureB
    ... change implementation ...
git commit
git push myfork featureBv2

ΠžΠΏΡ†ΠΈΡ --squash Π±Π΅Ρ€Π΅Ρ‚ всС измСнСния ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΈΡ… ΠΈ создаёт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅ Π±Π΅Π· создания ΠΊΠΎΠΌΠΌΠΈΡ‚Π° слияния. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ родитСля ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ всС измСнСния ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ позволяСт внСсти Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ измСнСния Π΄ΠΎ фактичСского создания ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. ΠžΠΏΡ†ΠΈΡ --no-commit ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Git Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ автоматичСски. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΌΡƒ сообщСниС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ сдСлали Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹Π΅ измСнСния ΠΈ ΠΎΠ½ΠΈ находятся Π² вашСй Π²Π΅Ρ‚ΠΊΠ΅ featureBv2.

image


ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ посрСдством E-Mail

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

git checkout -b topicA
    ... work ...
git commit
    ... work ...
git commit

БСйчас Ρƒ вас Π΄Π²Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΡƒΡŽ рассылку. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git format-patch для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ mbox, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΏΠΎΡ‡Ρ‚Π΅ β€” это ΠΎΠ±Π΅Ρ€Π½Ρ‘Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² сообщСниС e-mail, Π³Π΄Π΅ пСрвая строка ΠΈΠ· сообщСния ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΌΠΎΠΉ письма, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ строки плюс сам ΠΏΠ°Ρ‚Ρ‡ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Π΅Π»ΠΎΠΌ письма. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ‚Ρ‡Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ e-mail, сгСнСрированного с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ format-patch, сохраняСт всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

git format-patch -M origin/master
  0001-add-limit-to-log-function.patch
  0002-increase-log-output-to-30-from-25.patch

Команда format-patch Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список ΠΈΠΌΡ‘Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° создаёт. Π€Π»Π°Π³ -M ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Git ΠΈΡΠΊΠ°Ρ‚ΡŒ пСрСимСнования. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Ρ„Π°ΠΉΠ»Ρ‹ выглядят Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

cat 0001-add-limit-to-log-function.patch
  From 330090432754092d704da8e76ca5c05c198e71a8 Mon Sep 17 00:00:00 2001
  From: Jessica Smith <[email protected]>
  Date: Sun, 6 Apr 2008 10:17:23 -0700
  Subject: [PATCH 1/2] Add limit to log function
  Limit log functionality to the first 20
  ---
   lib/simplegit.rb |    2 +-
   1 files changed, 1 insertions(+), 1 deletions(-)
   
   diff --git a/lib/simplegit.rb b/lib/simplegit.rb
  index 76f47bc..f9815f1 100644
  --- a/lib/simplegit.rb
  +++ b/lib/simplegit.rb
  @@ -14,7 +14,7 @@ class SimpleGit
     end
     def log(treeish = 'master')
     command("git log #{treeish}")
     command("git log -n 20 #{treeish}")
end
   def ls_tree(treeish = 'master')
--
2.1.0

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти Ρ„Π°ΠΉΠ»Ρ‹, добавляя ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для списка рассылки, Π½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² сообщСнии ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. Если Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ тСкст ΠΌΠ΅ΠΆΠ΄Ρƒ строкой --- ΠΈ Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΏΠ°Ρ‚Ρ‡Π° (строка diff --git), Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ увидят Π΅Π³ΠΎ, Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.
Для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π² список рассылки ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

Git прСдоставляСт ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ, которая ΡƒΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‡ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ IMAP.

Для Π½Π°Ρ‡Π°Π»Π°, слСдуСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» imap Π² Ρ„Π°ΠΉΠ»Π΅ ~/.gitconfig. КаТдоС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git config, Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ сразу Π² Ρ„Π°ΠΉΠ»Π΅, Π½ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  [imap]
    folder = "[Gmail]/Drafts"
    host = imaps://imap.gmail.com
    user = [email protected]
    pass = YX]8g76G_2^sFbd
    port = 993
    sslverify = false

Если ваш сСрвСр IMAP Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ SSL, Ρ‚ΠΎ послСдниС Π΄Π²Π΅ строки Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ host Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ imap:// вмСсто imaps://. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ всС сдСлано, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git imap-send для помСщСния Π²Π°ΡˆΠΈΡ… ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ Π² ΠΏΠ°ΠΏΠΊΡƒ Drafts Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ IMAP сСрвСрС:

cat *.patch |git imap-send
  Resolving imap.gmail.com... ok
  Connecting to [74.125.142.109]:993... ok
  Logging in...
  sending 2 messages
  100% (2/2) done

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΏΠ°ΠΏΠΊΡƒ Drafts, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ To, ΡƒΠΊΠ°Π·Π°Π² адрСс ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΉ рассылки, ΠΏΡ€ΠΈ нСобходимости Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ Π‘Π‘, ΡƒΠΊΠ°Π·Π°Π² адрСс ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ»ΠΈ отвСтствСнного, ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ письмо.
Π’Π°ΠΊ ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свои ΠΏΠ°Ρ‚Ρ‡ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ SMTP сСрвСр. Как ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ случаС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄ git config ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ΅ΠΊΡ†ΠΈΡŽ sendemail Π² Ρ„Π°ΠΉΠ»Π΅ ~/.gitconfig:

   [sendemail]
    smtpencryption = tls
    smtpserver = smtp.gmail.com
    smtpuser = [email protected]
    smtpserverport = 587

ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git send-email:

git send-email *.patch
  0001-add-limit-to-log-function.patch
  0002-increase-log-output-to-30-from-25.patch
  Who should the emails appear to be from? [Jessica Smith <[email protected]>]
  Emails will be sent from: Jessica Smith <[email protected]>
  Who should the emails be sent to? [email protected]
  Message-ID to be used as In-Reply-To for the first email? y

ΠŸΠΎΠΌΠΎΡ‰ΡŒ ΠΏΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ совСты ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ тСстовоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ ΠΏΠΎ email доступны здСсь git-send-email.io


Π‘ΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π‘ΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя принятиС ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ, сгСнСрированных с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ format-patch ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π²Π°ΠΌ ΠΏΠΎ ΠΏΠΎΡ‡Ρ‚Π΅, ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π²Π΅Ρ‚ΠΊΠ°Ρ… ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π².


Π Π°Π±ΠΎΡ‚Π° с тСматичСскими Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ

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

Если Π²Ρ‹ создадитС Π²Π΅Ρ‚ΠΊΡƒ с ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ ΠΈ понятным Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, основанным Π½Π° Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ruby_client ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅, Ρ‚ΠΎ Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΉ, Ссли ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π½Π° ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΉ. Π‘ΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΌΡƒ Git ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° свойствСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ пространство ΠΈΠΌΠ΅Π½ для Π²Π΅Ρ‚ΠΎΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, sc/ruby_client, Π³Π΄Π΅ sc β€” это сокращСниС ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΡ‚ΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π» Ρ€Π°Π±ΠΎΡ‚Ρƒ. Как извСстно, Π²Π΅Ρ‚ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π° основании Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

git branch sc/ruby_client master

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ сразу ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ checkout -b:

git checkout -b sc/ruby_client master

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


ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΏΠΎΡ‡Ρ‚Π΅

Если Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΏΠ°Ρ‚Ρ‡ ΠΏΠΎ ΠΏΠΎΡ‡Ρ‚Π΅ ΠΈ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‚ΠΎ слСдуСт ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² сначала Π² тСматичСской Π²Π΅Ρ‚ΠΊΠ΅. БущСствуСт Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° примСнСния ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎ ΠΏΠΎΡ‡Ρ‚Π΅ ΠΏΠ°Ρ‚Ρ‡Π°: git apply ΠΈΠ»ΠΈ git am.


ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ‚Ρ‡Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ apply

Если ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎ ΠΏΠΎΡ‡Ρ‚Π΅ ΠΏΠ°Ρ‚Ρ‡ Π±Ρ‹Π» создан ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git diff ΠΈΠ»ΠΈ Unix ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ diff (Ρ‡Ρ‚ΠΎ Π½Π΅ рСкомСндуСтся Π΄Π΅Π»Π°Ρ‚ΡŒ), Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git apply. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΏΠ°Ρ‚Ρ‡ сохранСн здСсь /tmp/patch-ruby-client.patch, Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

git apply /tmp/patch-ruby-client.patch

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

НаконСц, git apply ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ модСль Β«ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ всё ΠΈΠ»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всё», Π³Π΄Π΅ измСнСния Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, Π»ΠΈΠ±ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π²ΠΎΠΎΠ±Ρ‰Π΅, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ patch ΠΌΠΎΠΆΠ΅Ρ‚ частично ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ Ρ„Π°ΠΉΠ»Ρ‹, привСдя ваш Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² нСпонятноС состояниС. Π’ Ρ†Π΅Π»ΠΎΠΌ, git apply Π±ΠΎΠ»Π΅Π΅ консСрвативСн, Ρ‡Π΅ΠΌ patch. ПослС выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π½Π΅ создаётся ΠΈ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

Командой git apply ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ примСнСния ΠΏΠ°Ρ‚Ρ‡Π° Π΄ΠΎ Π΅Π³ΠΎ фактичСского примСнСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ git apply --check:

git apply --check 0001-see-if-this-helps-the-gem.patch
  error: patch failed: ticgit.gemspec:1
  error: ticgit.gemspec: patch does not apply

Если ошибок Π½Π΅ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΏΠ°Ρ‚Ρ‡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’Π°ΠΊ ΠΆΠ΅, Π² случаС ошибки эта ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ 0 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ Π² скриптах.


ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ‚Ρ‡Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ am

Если участник ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Git ΠΈ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ format-patch для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ, Ρ‚ΠΎ Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³Ρ‡Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΠΏΠ°Ρ‚Ρ‡ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ информация ΠΎΠ± Π°Π²Ρ‚ΠΎΡ€Π΅ ΠΈ сообщСниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Если Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚Ρ€Π΅Π±ΡƒΠΉΡ‚Π΅ ΠΎΡ‚ Π²Π°ΡˆΠΈΡ… участников ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ format-patch вмСсто diff для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ. Π’Π°ΠΌ останСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git apply Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΈΠΌ.

Для примСнСния ΠΏΠ°Ρ‚Ρ‡Π°, созданного с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ format-patch, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ git am (ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π°Π·Π²Π°Π½Π° am ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ примСняСт Β«applyΒ» Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Β«mailboxΒ»). Π‘ тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΎΠ½Π° просто Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ mbox-Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ тСкста хранится ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько элСктронных писСм. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

   From 330090432754092d704da8e76ca5c05c198e71a8 Mon Sep 17 00:00:00 2001
  From: Jessica Smith <[email protected]>
  Date: Sun, 6 Apr 2008 10:17:23 -0700
  Subject: [PATCH 1/2] Add limit to log function
  Limit log functionality to the first 20

Π­Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ format-patch, которая Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»Π°ΡΡŒ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅; это Ρ‚Π°ΠΊ ΠΆΠ΅ прСдставляСт собой Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ mbox. Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» ΠΏΠ°Ρ‚Ρ‡, ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ сформированный ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git send-email, ΠΈ Π²Ρ‹ сохранили Π΅Π³ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ mbox, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ этот Ρ„Π°ΠΉΠ» Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git am, которая Π½Π°Ρ‡Π½Ρ‘Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ всС Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΠ°Ρ‚Ρ‡ΠΈ. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ нСсколько писСм Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ mbox, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сразу ΡΠ΅Ρ€ΠΈΡŽ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ», Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π·Π° Ρ€Π°Π·, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ git am.

Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, Ссли ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ созданный с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ format-patch ΠΏΠ°Ρ‚Ρ‡ Ρ„Π°ΠΉΠ» Π² систСму управлСния Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, Ρ‚ΠΎ Π²Ρ‹ смоТСтС ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ сСбС ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ локально с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git am:

git am 0001-limit-log-function.patch
  Applying: Add limit to log function

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ

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

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ДТСссика ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»Π° Π²Π°ΠΌ письмо, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сказано, Ρƒ Π½Π΅Ρ‘ Π΅ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π² Π²Π΅Ρ‚ΠΊΠ΅ ruby-client Π΅Ρ‘ рСпозитория. Π”ΠΎΠ±Π°Π²ΠΈΠ² ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² измСнСния ΠΈΠ· этой Π²Π΅Ρ‚ΠΊΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния извлСкая ΠΈΡ… локально:

git remote add jessica git://github.com/jessica/myproject.git
git fetch jessica
git checkout -b rubyclient jessica/ruby-client

Если ΠΎΠ½Π° снова ΠΏΡ€ΠΈΡˆΠ»Ρ‘Ρ‚ Π²Π°ΠΌ письмо с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΡƒΠΆΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, Ρ‚ΠΎ для Π΅Π³ΠΎ получСния достаточно fetch ΠΈ checkout, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΡƒΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½.

Если Π²Ρ‹ с ΠΊΠ΅ΠΌ-Ρ‚ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ постоянно, Π½ΠΎ всё Ρ€Π°Π²Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ссылку Π½Π° Π½Π΅Π³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git pull. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠΌΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ, Π° ссылка Π½Π° Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ сохранСна Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

git pull https://github.com/onetimeguy/project
  From https://github.com/onetimeguy/project
   * branch            HEAD       -> FETCH_HEAD
  Merge made by the 'recursive' strategy.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ примСняСмых ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

На Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρƒ вас Π΅ΡΡ‚ΡŒ тСматичСская Π²Π΅Ρ‚ΠΊΠ°, содСрТащая прСдоставлСнныС измСнСния. БСйчас Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ рассматриваСтся Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΡΠ»ΠΈΡ‚ΡŒ измСнСния Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Ρ‘ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² вашСй основной Π²Π΅Ρ‚ΠΊΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΎΠΏΡ†ΠΈΡŽ --not ΠΏΠ΅Ρ€Π΅Π΄ Π΅Ρ‘ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ. Π­Ρ‚ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΡŽ использовавшСгося Ρ€Π°Π½Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° master..contrib. НапримСр, Ссли участник ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» Π²Π°ΠΌ Π΄Π²Π° ΠΏΠ°Ρ‚Ρ‡Π°, Π° Π²Ρ‹ создали Π²Π΅Ρ‚ΠΊΡƒ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ contrib ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΈΡ…, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

git log contrib --not master
  commit 5b6235bd297351589efc4d73316f0a68d484f118
  Author: Scott Chacon <[email protected]>
  Date:   Fri Oct 24 09:53:59 2008 -0700
      See if this helps the gem
  commit 7482e0d16d04bea79d0dba8988cc78df655f16a0
  Author: Scott Chacon <[email protected]>
  Date:   Mon Oct 22 19:38:36 2008 -0700
      Update gemspec to hopefully work better

Для просмотра ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, прСдставлСнных Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ -p ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git log, которая Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ.

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

git diff master

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

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

Π§Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‚Π°ΠΊ это измСнСния тСматичСской Π²Π΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдстоит ΡΠ»ΠΈΡ‚ΡŒ Π² master Π²Π΅Ρ‚ΠΊΡƒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, сказав Git ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚ тСматичСской Π²Π΅Ρ‚ΠΊΠΈ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΎΠ±Ρ‰ΠΈΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ для ΠΎΠ±ΠΎΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ. ВСхничСски это дСлаСтся Π·Π° счёт явного указания ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈ примСнСния Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΊ Π½Π΅ΠΌΡƒ:

git merge-base contrib master
  36c7dba2c95e6bbb78dfa822519ecfec6e1ca649
git diff 36c7db

ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ:

git diff $(git merge-base contrib master)

Однако это Π½Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, поэтому Git прСдоставляСт Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ способ: синтаксис троСточия ... . ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ diff, слСдуСт ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ послС ΠΈΠΌΠ΅Π½ΠΈ Π²Π΅Ρ‚ΠΊΠΈ для получСния Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π΅ΠΉ ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ родитСля с Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ:

git diff master...contrib

Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· тСматичСской Π²Π΅Ρ‚ΠΊΠΈ, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ родитСля с Π²Π΅Ρ‚ΠΊΠΎΠΉ master. ПолСзно Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ синтаксис.


Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹

Когда всС измСнСния Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ тСматичСской Π²Π΅Ρ‚ΠΊΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с основной Π²Π΅Ρ‚ΠΊΠΎΠΉ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.


Π‘Ρ…Π΅ΠΌΡ‹ слияния

Π’ простом Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ процСссС продСланная Ρ€Π°Π±ΠΎΡ‚Π° просто сливаСтся Π² Π²Π΅Ρ‚ΠΊΡƒ master. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ сцСнарии Ρƒ вас Π΅ΡΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ° master, которая содСрТит ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄. Когда Ρ€Π°Π±ΠΎΡ‚Π° Π² тСматичСской Π²Π΅Ρ‚ΠΊΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° ΠΈΠ»ΠΈ Π²Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ Ρ‡ΡŒΡŽ-Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π²Ρ‹ сливаСтС Π΅Ρ‘ Π² Π²Π΅Ρ‚ΠΊΡƒ master ΠΈ удаляСтС, Π·Π°Ρ‚Π΅ΠΌ процСсс повторяСтся.

Если Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π΅ Π²Π΅Ρ‚ΠΊΠΈ ruby_client ΠΈ php_client с ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС Π˜ΡΡ‚ΠΎΡ€ΠΈΡ с нСсколькими тСматичСскими Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ, ΠΈ Π²Ρ‹ сначала сливаСтС Π²Π΅Ρ‚ΠΊΡƒ ruby_client, Π° Π·Π°Ρ‚Π΅ΠΌ php_client, Ρ‚ΠΎ состояниС вашСго рСпозитория Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС БлияниС тСматичСской Π²Π΅Ρ‚ΠΊΠΈ.

image

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

Если Ρƒ вас ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Π°ΠΌ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ двухступСнчатый Ρ†ΠΈΠΊΠ» слияния. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ сцСнарии Ρƒ вас ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π²Π΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ master ΠΈ develop, Π³Π΄Π΅ Π² master ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ измСнСния, Π° всС Π½ΠΎΠ²Ρ‹Π΅ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π²Π΅Ρ‚ΠΊΡƒ develop. ОбС Π²Π΅Ρ‚ΠΊΠΈ рСгулярно ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° новая тСматичСская Π²Π΅Ρ‚ΠΊΠ° Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ слиянию (ΠŸΠ΅Ρ€Π΅Π΄ слияниСм тСматичСской Π²Π΅Ρ‚ΠΊΠΈ), Π²Ρ‹ сливаСтС Π΅Ρ‘ Π² develop (ПослС слияния тСматичСской Π²Π΅Ρ‚ΠΊΠΈ); Π·Π°Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ выпускаСтС Ρ€Π΅Π»ΠΈΠ·, Π²Π΅Ρ‚ΠΊΠ° master смСщаСтся Π½Π° ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ΅ состояниС Π²Π΅Ρ‚ΠΊΠΈ develop (ПослС Ρ€Π΅Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°).

image

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


Π‘Ρ…Π΅ΠΌΠ° с большим количСством слияний

Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Git ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ: master, next, seen (Ρ€Π°Π½Π΅Π΅ pu β€” ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ обновлСния) для Π½ΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ maint для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

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

image

Если содСрТимоС тСматичСских Π²Π΅Ρ‚ΠΎΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΎΠ½ΠΎ сливаСтся Π² Π²Π΅Ρ‚ΠΊΡƒ seen. Когда выясняСтся, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ стабилСн, ΠΎΠ½ сливаСтся Π² Π²Π΅Ρ‚ΠΊΡƒ master. Π—Π°Ρ‚Π΅ΠΌ Π²Π΅Ρ‚ΠΊΠΈ next ΠΈ seen ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° основании master. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ master практичСски всСгда двигаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΏΠ΅Ρ€Π΅Π΄, next врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ пСрСбазируСтся, Π° seen пСрСбазируСтся Π΅Ρ‰Ρ‘ Ρ‡Π°Ρ‰Π΅.

image

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ тСматичСская Π²Π΅Ρ‚ΠΊΠ° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ слита Π² master, ΠΎΠ½Π° удаляСтся ΠΈΠ· рСпозитория. Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ содСрТит Π²Π΅Ρ‚ΠΊΡƒ maint, которая отвСтвляСтся ΠΎΡ‚ послСднСго Ρ€Π΅Π»ΠΈΠ·Π° для прСдоставлСния ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ, Ссли трСбуСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, послС клонирования ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²Π΅Ρ‚ΠΊΠΈ, Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ стадии Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π½Π° сколько ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹ΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅; вмСстС с этим, Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс структурирован, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄. Π Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Git спСцифицирован. Для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ понимания процСсса ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Git Maintainer’s guide


Π‘Ρ…Π΅ΠΌΠ° с ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΡ‚Π±ΠΎΡ€ΠΎΠΌ

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

Π”Ρ€ΡƒΠ³ΠΈΠΌ способом ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ являСтся ΠΈΡ… ΠΎΡ‚Π±ΠΎΡ€ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² cherry-pick. ΠžΡ‚Π±ΠΎΡ€ Π² Git ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС формируСтся ΠΏΠ°Ρ‚Ρ‡ для Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈ примСняСтся ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π² тСматичСской Π²Π΅Ρ‚ΠΊΠ΅ присутствуСт нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π·ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…, ΠΈΠ»ΠΈ Π² тСматичСской Π²Π΅Ρ‚ΠΊΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈ Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π±ΠΎΡ€ вмСсто пСрСбазирования.

image

Для примСнСния ΠΊΠΎΠΌΠΌΠΈΡ‚Π° e43a6 ΠΊ Π²Π΅Ρ‚ΠΊΠ΅ master Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

  git cherry-pick e43a6
  Finished one cherry-pick.
  [master]: created a0a41a9: "More friendly message when locking the index fails."
   3 files changed, 17 insertions(+), 3 deletions(-)

Π­Ρ‚ΠΎ дСйствиС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ измСнСния, содСрТащиСся Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ e43a6, Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ сформирован Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ SHA-1.

image

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, отбросив ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.


Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Rerere

Если Π²Ρ‹ часто ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ слияниС ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚Π΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠ΅ тСматичСскиС Π²Π΅Ρ‚ΠΊΠΈ, Ρ‚ΠΎ Π² Git Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ rerere, призванная Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ.

Rerere ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ reuse recorded resolution (ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сохранённоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅) β€” это способ сокращСния количСства ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ². Когда эта опция Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°, Git Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π΄ΠΎ ΠΈ послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ слияния, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Ρ€Π°Π½Π΅Π΅.

Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ называСтся rerere.enabled, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ глобально ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

git config --global rerere.enabled true

ПослС этого любоС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° слияния Π±ΡƒΠ΄Π΅Ρ‚ записано Π½Π° случай ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования.

Если Π½ΡƒΠΆΠ½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΊΡΡˆΡƒ rerere Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git rerere. Когда ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π·Π²Π°Π½Π° Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Git провСряСт Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ пытаСтся Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° слияния (Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ установлСнной настройкС rerere.enabled Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true).

БущСствуСт мноТСство Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ для просмотра, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ записано, удалСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… записСй ΠΈΠ· кэша, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΉ очистки. Π‘ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ rerere Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Rerere Π³Π»Π°Π²Ρ‹ 7.


ΠŸΠΎΠΌΠ΅Ρ‡Π°ΠΉΡ‚Π΅ свои Ρ€Π΅Π»ΠΈΠ·Ρ‹

ПослС выпуска Ρ€Π΅Π»ΠΈΠ·Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚. Для этого ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π΅Π³, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ описано Π² Π³Π»Π°Π²Π΅ ΠžΡΠ½ΠΎΠ²Ρ‹ Git. ΠšΡ€ΠΎΠΌΠ΅ этого, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΡƒΡŽ подпись для Ρ‚Π΅Π³Π°, Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ это Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

  git tag -s v1.5 -m 'my signed 1.5 tag'
  You need a passphrase to unlock the secret key for
  user: "Scott Chacon <[email protected]>"
  1024-bit DSA key, ID F721C45A, created 2009-02-09

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΡƒΡŽ подпись ΠΏΡ€ΠΈ расстановкС Ρ‚Π΅Π³ΠΎΠ², Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° распространСния ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ части PGP ΠΊΠ»ΡŽΡ‡Π°, использованного ΠΏΡ€ΠΈ создании подписи. Π‘ΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ Git ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ свой ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΊΠ°ΠΊ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ установив ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠΉΡΡ Π½Π° Π½Π΅Π³ΠΎ Ρ‚Π΅Π³. Π§Ρ‚ΠΎΠ±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈΠ· списка доступных, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ gpg --list-keys:

gpg --list-keys
/Users/schacon/.gnupg/pubring.gpg
---------------------------------
pub uid sub
1024D/F721C45A 2009-02-09 [expires: 2010-02-09]
               Scott Chacon <[email protected]>
2048g/45D02282 2009-02-09 [expires: 2010-02-09]

Π—Π°Ρ‚Π΅ΠΌ экспортируйтС Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈ помСститС Π΅Π³ΠΎ нСпосрСдствСнно Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Git ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git hash-object, которая создаст Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с содСрТимым ΠΊΠ»ΡŽΡ‡Π° ΠΈ Π²Π΅Ρ€Π½Ρ‘Ρ‚ SHA-1 этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

gpg -a --export F721C45A | git hash-object -w --stdin
  659ef797d181633c87ec71ac3f9ba29fe5775b92

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ваш ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ находится Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Π½Π΅Π³ΠΎ Ρ‚Π΅Π³, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ SHA-1:

git tag -a maintainer-pgp-pub 659ef797d181633c87ec71ac3f9ba29fe5775b92

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git push --tags, maintainer-pgp-pub Ρ‚Π΅Π³ станСт общСдоступным. Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС, ΠΊΡ‚ΠΎ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ подпись, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ваш ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Π΅Π³ΠΎ ΠΈΠ· рСпозитория:

git show maintainer-pgp-pub | gpg --import

ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΡƒΡŽ подпись Π²Π°ΡˆΠΈΡ… Ρ‚Π΅Π³ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ этого, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструкции ΠΏΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ вашСй подписи Π² сообщСниС Ρ‚Π΅Π³Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git show <tag>


ГСнСрация Π½ΠΎΠΌΠ΅Ρ€Π° сборки

Git Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ для ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², поэтому Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Ρ‚ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git describe для Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Git Π²Π΅Ρ€Π½Ρ‘Ρ‚ имя блиТайшСго Ρ‚Π΅Π³Π°, количСство ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² послС Π½Π΅Π³ΠΎ ΠΈ частичноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ SHA-1 для ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° (с прСфиксом Π² Π²ΠΈΠ΄Π΅ Π±ΡƒΠΊΠ²Ρ‹ g β€” ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Git):

git describe master
  v1.6.2-rc1-20-g8c5b85c

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ снимок ΠΈΠ»ΠΈ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ сборку ΠΈ Π΄Π°Ρ‚ΡŒ Π΅ΠΉ понятноС для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π½Π°Π·Π²Π°Π½ΠΈΠ΅. К слову, Ссли Π²Ρ‹ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git ΠΈ собСрСтС Π΅Π³ΠΎ ΠΈΠ· исходного ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git --version Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅. Если ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ имя ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Ρ‚Π΅Π³, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ самого Ρ‚Π΅Π³Π°.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΠΌΠ°Π½Π΄Π° git describe ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚Π΅Π³ΠΈ (созданныС с использованиСм ΠΎΠΏΡ†ΠΈΠΉ -a ΠΈΠ»ΠΈ -s); Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лСгковСсныС (Π½Π΅ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅) ΠΌΠ΅Ρ‚ΠΊΠΈ, Ρ‚ΠΎ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ --tags. Π’Π°ΠΊΠΆΠ΅ это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ git checkout ΠΈ git show, Π½ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ·-Π·Π° сокращСнного значСния SHA-1.

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ядро Linux Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΎ ΠΊ использованию 10 символов Π² SHA-1 вмСсто 8 Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ git describe стали Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ.


ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Ρ€Π΅Π»ΠΈΠ·Π°

ВрСмя Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π»ΠΈΠ· сборки. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ² послСднСго состояния вашСго ΠΊΠΎΠ΄Π° для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Git. Для создания Π°Ρ€Ρ…ΠΈΠ²Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git archive:

git archive master --prefix='project/' | gzip > `git describe master`.tar.gz
  $ ls *.tar.gz
  v1.6.2-rc1-20-g8c5b85c.tar.gz

ΠžΡ‚ΠΊΡ€Ρ‹Π²ΡˆΠΈΠΉ этот tarball-Π°Ρ€Ρ…ΠΈΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ послСднСС состояниС ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ project. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ способом ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ zip-Π°Ρ€Ρ…ΠΈΠ², просто Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΎΠΏΡ†ΠΈΡŽ --format=zip для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git archive:

git archive master --prefix='project/' --format=zip > `git describe master`.zip

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ tarball- ΠΈ zip-Π°Ρ€Ρ…ΠΈΠ²Ρ‹ с Ρ€Π΅Π»ΠΈΠ·ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° сайт ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΏΠΎΡ‡Ρ‚Π΅.


ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ история (Shortlog)

БСйчас самоС врСмя ΠΎΠΏΠΎΠ²Π΅ΡΡ‚ΠΈΡ‚ΡŒ людСй ΠΈΠ· списка рассылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят Π·Π½Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ происходит с вашим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git shortlog ΠΌΠΎΠΆΠ½ΠΎ быстро ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, внСсённых Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° послСднСго Ρ€Π΅Π»ΠΈΠ·Π° ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ рассылки. Она собираСт всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ список ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° послСднСго Ρ€Π΅Π»ΠΈΠ·Π° с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ v1.0.1:

git shortlog --no-merges master --not v1.0.1
  Chris Wanstrath (6):
        Add support for annotated tags to Grit::Tag
        Add packed-refs annotated tag support.
        Add Grit::Commit#to_patch
        Update version and History.txt
        Remove stray `puts`
        Make ls_tree ignore nils
  Tom Preston-Werner (4):
        fix dates in history
        dynamic version method
        Version bump to 1.0.2
        Regenerated gemspec for version 1.0.2


К оглавлСнию

Доступ ΠΏΠΎ SSH

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ рСпозиториям Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» https:// Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΡΡΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданного Π»ΠΎΠ³ΠΈΠ½Π° ΠΈ пароля.

Если ΠΆΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ SSH доступ, Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π²Π°ΠΌ понадобится Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ SSH ΠΊΠ»ΡŽΡ‡. (Если ΠΆΠ΅ Ρƒ вас Π½Π΅Ρ‚ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ SSH ΠΊΠ»ΡŽΡ‡Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π³ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ)


ВнСсСниС собствСнного Π²ΠΊΠ»Π°Π΄Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ fork

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π½ΠΎΡΠΈΡ‚ΡŒ свой Π²ΠΊΠ»Π°Π΄ Π² ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρƒ нас Π½Π΅Ρ‚ ΠΏΡ€Π°Π² Π½Π° внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ push ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ своё собствСнноС ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ fork ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ GitHub создаст Π²Π°ΡˆΡƒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ копию ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, данная копия Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² вашСм пространствС ΠΈΠΌΡ‘Π½ ΠΈ Π²Ρ‹ смоТСтС Π»Π΅Π³ΠΊΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ измСнСния ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ push ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ обСспокоСны Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² Ρ€ΠΎΠ»ΠΈ соавторов, ΠΈΠΌΠ΅Π»ΠΈ ΠΏΡ€Π°Π²ΠΎ Π½Π° внСсСниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΈΡ… ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ push. Π›ΡŽΠ΄ΠΈ просто ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свои собствСнныС вСтвлСния fork, Π²Π½ΠΎΡΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° измСнСния, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ свои внСсённыС измСнСния Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΡƒΡ‚Ρ‘ΠΌ создания запроса Π½Π° принятиС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Pull Request, сами ΠΆΠ΅ запросы Π½Π° принятиС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Pull Request Π±ΡƒΠ΄ΡƒΡ‚ описаны Π΄Π°Π»Π΅Π΅.

Запрос Π½Π° принятиС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Pull Request ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ с обсуТдСниСм отправляСмого ΠΊΠΎΠ΄Π°, ΠΈ Π°Π²Ρ‚ΠΎΡ€ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΅Π³ΠΎ участники, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ участиС Π² обсуТдСнии ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π°Π²Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠΈ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, послС Ρ‡Π΅Π³ΠΎ Π°Π²Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ измСнСния Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π·Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅Β» Fork

Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π° ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π½ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΡƒΡŽ страницу, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Π²Π°ΡˆΡƒ копию, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Π²Π° Π½Π° запись.

Π Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс с использованиСм GitHub

Π Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс GitHub основан Π½Π° тСматичСских Π²Π΅Ρ‚ΠΊΠ°Ρ…

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„ΠΎΡ€ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π½Π° основании Π²Π΅Ρ‚ΠΊΠΈ `master`.
3. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² с измСнСниями, ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.
4. ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ эту Π²Π΅Ρ‚ΠΊΡƒ Π² ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° GitHub.
5. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ запрос Π½Π° слияниС Π½Π° GitHub.
6. ΠžΠ±ΡΡƒΠΆΠ΄Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ, вноситС измСнСния, Ссли Π½ΡƒΠΆΠ½ΠΎ.
7. Π’Π»Π°Π΄Π΅Π»Π΅Ρ† ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ принятии ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π»ΠΈΠ±ΠΎ ΠΎΠ± ΠΈΡ… ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΈ. 
8. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ `master` ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π΅Ρ‘ Π² свой Ρ„ΠΎΡ€ΠΊ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ запроса Π½Π° слияниС

Π’ΠΎΠ½ΠΈ ΠΈΡ‰Π΅Ρ‚, Ρ‡Π΅Π³ΠΎ Π±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° своём новСньком Arduino. ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, ΠΎΠ½ Π½Π°ΡˆΡ‘Π» классный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° https://github.com/schacon/blink.

Для Π½Π°Ρ‡Π°Π»Π°, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Fork, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ копию ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠœΡ‹ зарСгистрированы Π½Π° GitHub ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ tonychacon, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ наша копия окаТСтся ΠΏΠΎ адрСсу https://github.com/tonychacon/blink, Π³Π΄Π΅ ΠΌΡ‹ смоТСм Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘. ΠœΡ‹ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ, создадим Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, внСсём Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ ΠΈΡ… Π½Π° GitHub.

$ git clone https://github.com/tonychacon/blink (1) Cloning into 'blink'...
$ cd blink
$ git checkout -b slow-blink (2) Switched to a new branch 'slow-blink'
$ sed -i '' 's/1000/3000/' blink.ino (macOS) (3) # If you're on a Linux system, do this instead: # $ sed -i 's/1000/3000/' blink.ino (3)
$ git diff --word-diff (4)
diff --git a/blink.ino b/blink.ino
index 15b9911..a6cc5a5 100644
--- a/blink.ino
+++ b/blink.ino
@@ -18,7 +18,7 @@ void setup() {
// the loop routine runs over and over again forever: void loop() {
    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
    [-delay(1000);-]{+delay(3000);+}               // wait for a second
    digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
    [-delay(1000);-]{+delay(3000);+}               // wait for a second
}

$ git commit -a -m 'Change delay to 3 seconds' (5) [slow-blink 5ca509d] Change delay to 3 seconds
   1 file changed, 2 insertions(+), 2 deletions(-)
$ git push origin slow-blink (6)
Username for 'https://github.com': tonychacon
Password for 'https://[email protected]':
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 340 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0)
To https://github.com/tonychacon/blink
   * [new branch]      slow-blink -> slow-blink
  1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π°ΡˆΡƒ копию
  2. Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ
  3. Вносим свои измСнСния
  4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ измСнСния
  5. ЀиксируСм измСнСния Π² тСматичСской Π²Π΅Ρ‚ΠΊΡƒ
  6. ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π² Π½Π°ΡˆΡƒ копию Π½Π° GitHub

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΌΡ‹ Π·Π°ΠΉΠ΄Ρ‘ΠΌ Π½Π° страничку нашСй ΠΊΠΎΠΏΠΈΠΈ Π½Π° GitHub, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ GitHub Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» наши измСнСния ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ запрос Π½Π° слияниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ большой Π·Π΅Π»Ρ‘Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΉΡ‚ΠΈ Π½Π° страницу Branches, ΠΏΠΎ адрСсу https://github.com/<user>/<project>/branches, Π½Π°ΠΉΡ‚ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ запрос ΠΎΡ‚Ρ‚ΡƒΠ΄Π°.

image

ΠœΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ список ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² нашСй тСматичСской Π²Π΅Ρ‚ΠΊΠ΅, Β«ΠΎΠΏΠ΅Ρ€Π΅Π΄ΠΈΠ²ΡˆΠΈΡ…Β» Π²Π΅Ρ‚ΠΊΡƒ master (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС всСго ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚) ΠΈ прСдпросмотр всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, вносимых этими ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ.

ПослС создания запроса Π½Π° слияниС (ΠΏΡƒΡ‚Ρ‘ΠΌ наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ Create pull request Π½Π° этой страницС) Π²Π»Π°Π΄Π΅Π»Π΅Ρ† Ρ„ΠΎΡ€ΠΊΠ½ΡƒΡ‚ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… измСнСниях со ссылкой Π½Π° страницу с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ запросС.


ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° запроса Π½Π° слияниС

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

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

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π»Π°Π΄Π΅Π»Π΅Ρ† ΠΏΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ измСнСния, Π°Π²Ρ‚ΠΎΡ€ запроса Π½Π° слияниС (Π° Ρ‚Π°ΠΊΠΆΠ΅ всС подписавшиСся Π½Π° этот Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ) ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ увСдомлСния.

GitHub Ρ‚Π°ΠΊ ΠΆΠ΅ провСряСт ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ запрос Π½Π° слияниС Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ Π±Π΅Π· ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈ прСдоставляСт ΠΊΠ½ΠΎΠΏΠΊΡƒ для осущСствлСния слияния Π½Π° сСрвСрС. Π­Ρ‚Π° ΠΊΠ½ΠΎΠΏΠΊΠ° отобраТаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Π²Π° Π½Π° запись Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ слияниС. По Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π½Π° Π½Π΅Ρ‘ GitHub ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Ρ‘Ρ‚ non-fast-forward слияниС, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ Π΄Π°ΠΆΠ΅ Ссли слияниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ осущСствлСно ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΎΠΉ Π²ΠΏΠ΅Ρ€Π΅Π΄, всё Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ создан ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния.


ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ запросы Π½Π° слияниС

Запросы слияния ΠΊΠ°ΠΊ ΠŸΠ°Ρ‚Ρ‡ΠΈ

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° GitHub ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π²Π΅Ρ‚ΠΊΠΈ запросов Π½Π° слияниС ΠΊΠ°ΠΊ бСсСду ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ³ΠΎ измСнСния, Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΡƒΡŽΡΡ слияниСм ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

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


Π‘Π»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π° исходным Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ

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

Если Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Запрос ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ слияния, Ρ‚ΠΎ Π²Π°ΠΌ слСдуСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ свою Π²Π΅Ρ‚ΠΊΡƒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ Π½Π΅ Π΄Π΅Π»Π°Π» лишнюю Ρ€Π°Π±ΠΎΡ‚Ρƒ.

БущСствуСт Π΄Π²Π° основных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свою Π²Π΅Ρ‚ΠΊΡƒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ master Π²Π΅Ρ‚ΠΊΠΈ исходного рСпозитория), Π»ΠΈΠ±ΠΎ ΡΠ»ΠΈΡ‚ΡŒ Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π² свою.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π° GitHub Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ послСдний Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΌΡ‹ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. Π’Π°ΠΆΠ½Π° история ΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ слияниС, Π° ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ принСсёт Π²Π°ΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ чистой истории, ΠΏΡ€ΠΈ этом ΠΎΠ½ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ слоТнСС ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ источником ошибок.

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

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ tonychacon, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ использовали Ρ€Π°Π½Π΅Π΅, основной Π°Π²Ρ‚ΠΎΡ€ сдСлал измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‚ с запросом Π½Π° слияниС. Рассмотрим это пошагово.

$ git remote add upstream https://github.com/schacon/blink (1)
 
$ git fetch upstream (2)
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done. Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0) From https://github.com/schacon/blink
   * [new branch]      master     -> upstream/master
    
$ git merge upstream/master (3)
Auto-merging blink.ino
CONFLICT (content): Merge conflict in blink.ino
Automatic merge failed; fix conflicts and then commit the result.

$ vim blink.ino (4)
$ git add blink.ino
$ git commit
[slow-blink 3c8d735] Merge remote-tracking branch 'upstream/master' \
      into slower-blink
      
$ git push origin slow-blink (5)
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 682 bytes | 0 bytes/s, done. Total 6 (delta 2), reused 0 (delta 0)
To https://github.com/tonychacon/blink
     ef4725c..3c8d735  slower-blink -> slow-blink
  1. ДобавляСм исходный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ с ΠΈΠΌΠ΅Π½Π΅ΠΌ upstream.
  2. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ послСдниС измСнСния ΠΈΠ· Π½Π΅Π³ΠΎ.
  3. Π‘Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π² Π½Π°ΡˆΡƒ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ.
  4. Π˜ΡΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚.
  5. ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ измСнСния Π² Ρ‚Ρƒ ΠΆΠ΅ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ сдСлано, запрос Π½Π° слияниС Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ слияния.

Одна ΠΈΠ· Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… особСнностСй Git - это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ это постоянно. Если Ρƒ вас ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΡΠ»ΠΈΠ²Π°Ρ‚ΡŒ измСнСния ΠΈΠ· Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ снова ΠΈ снова ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌΠΈ, возникшими с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° вашСго послСднСго слияния, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ процСсс ΠΎΡ‡Π΅Π½ΡŒ управляСмым.

Если Π²Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Ρ‘ ΠΏΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ, Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½ΠΎ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ рСкомСндуСтся ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ запрос Π½Π° слияниС. Если Π΄Ρ€ΡƒΠ³ΠΈΠ΅ люди ΡƒΠΆΠ΅ стянули Π΅Ρ‘ ΠΈ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ρ‚ΠΎ Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Ρ‘Ρ‚Π΅ΡΡŒ со всСми ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, описанными Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠžΠΏΠ°ΡΠ½ΠΎΡΡ‚ΠΈ пСрСмСщСния Π³Π»Π°Π²Ρ‹ 3. ВмСсто этого, ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π² Π½ΠΎΠ²ΡƒΡŽ Π½Π° GiHub ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ запрос Π½Π° слияниС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ, Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ исходный.


Бсылки

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ваш ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ вопрос Π±ΡƒΠ΄Π΅Ρ‚: «Как ΠΌΠ½Π΅ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ запрос слияния?Β»

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, сущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ способов ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ практичСски Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Π²Π° записи Π½Π° GitHub.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ с пСрСкрёстных ссылок для запросов слияния ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. ВсСм запросам слияния ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. НапримСр, Ρƒ вас Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ запроса Π½Π° слияниС с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ #3 ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ #3. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° любой запрос слияния ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ мСста, просто Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ #<num> Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΈΠ»ΠΈ описаниС.

Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, Ссли ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΈΠ»ΠΈ запрос слияния находятся Π³Π΄Π΅-Ρ‚ΠΎ Π΅Ρ‰Ρ‘; ΠΏΠΈΡˆΠΈΡ‚Π΅ username#<num> Ссли ΡΡΡ‹Π»Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈΠ»ΠΈ запрос слияния, находящиСся Π² ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Ρ‘Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΈΠ»ΠΈ username/repo#<num> Ссли ΡΡΡ‹Π»Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Бсылки Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄ΡΠ²Π΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ.

ΠšΡ€ΠΎΠΌΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ SHA-1. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ 40 ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Ρ…Π΅Ρˆ SHA-1, Π½ΠΎ Ссли GitHub ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Ρ‚ΠΎ автоматичСски подставит ссылку Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚. Как Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΊΠ°ΠΊ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ…, Ρ‚Π°ΠΊ ΠΈ Π² ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Ρ‘Π½Π½Ρ‹Ρ… рСпозиториях Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Π»ΠΈ это с ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ.


GitHub-вСрсия Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Markdown

Бсылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ β€” это лишь Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠ½Π΅ΠΉΡˆΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² тСкстовых полях Π½Π° GitHub. Для ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΠ»ΠΈ запроса слияния Π² полях описания, коммСнтария, коммСнтария ΠΊΠΎΠ΄Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ GitHub-Π²Π΅Ρ€ΡΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Markdown.

Бписки Π·Π°Π΄Π°Ρ‡

Бписок Π·Π°Π΄Π°Ρ‡ β€” это пСрвая Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ваТная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ спСцифичСской Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ GitHub, особСнно для запросов слияния. Бписок Π·Π°Π΄Π°Ρ‡ прСдставляСт собой список Ρ„Π»Π°ΠΆΠΊΠΎΠ² для Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π² описании ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΠ»ΠΈ запроса Π½Π° слияниС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ сдСлано Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Ρ€Π΅ΡˆΡ‘Π½Π½ΠΎΠΉ.

Бписок Π·Π°Π΄Π°Ρ‡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  - [X] Write the code
  - [ ] Write all the tests
  - [ ] Document the code

ΠžΡ‚Ρ€Ρ‹Π²ΠΊΠΈ ΠΊΠΎΠ΄Π°

Π’ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΡ‚Ρ€Ρ‹Π²ΠΊΠΈ ΠΊΠΎΠ΄Π°.

Для добавлСния ΠΎΡ‚Ρ€Ρ‹Π²ΠΊΠ° ΠΊΠΎΠ΄Π° слСдуСт ΠΎΠ±Ρ€Π°ΠΌΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ.

for(int i=0 ; i < 5 ; i++)
{
   System.out.println("i is : " + i);
} 

Если Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ языка, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, GitHub ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ подсвСтку синтаксиса.


Π¦ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Если Π²Ρ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‡Π°ΡΡ‚ΡŒ большого коммСнтария, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ†ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ, прСдваряя Π΅Ρ‘ символом >. Π­Ρ‚ΠΎ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ сущСствуСт комбинация клавиш для этого. Если Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ тСкст, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ, ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ r, Ρ‚ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ тСкст Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΊΠ°ΠΊ Ρ†ΠΈΡ‚Π°Ρ‚Π° Π² ваш ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ.

  > Whether 'tis Nobler in the mind to suffer
  > The Slings and Arrows of outrageous Fortune,
  How big are these slings and in particular, these arrows?

ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ

ВСхничСски, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π½Π΅ относятся ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅ GitHub, Π½ΠΎ ΠΈΡ… использованиС ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ссылкам Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² коммСнтариях, GitHub позволяСт Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΎΠ½Π° автоматичСски загруТаСтся Π½Π° ΠΎΠ±Π»Π°ΠΊΠΎ git ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½Π° ΠΈ доступна ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ссылкС.


ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ GitHub рСпозитория Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии

ПослС создания Ρ„ΠΎΡ€ΠΊΠ°, ваш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСзависимо ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСпозитория. Π’ частности, ΠΏΡ€ΠΈ появлСнии Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² GitHub ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ вас ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ сообщСниСм: This branch is 5 commits behind progit:master.

ΠŸΡ€ΠΈ этом GitHub Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ обновляСт ваш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ β€” это Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ сами. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, это ΠΎΡ‡Π΅Π½ΡŒ просто ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. НапримСр, Ссли Π²Ρ‹ сдСлали Ρ„ΠΎΡ€ΠΊ рСпозитория https://github.com/progit/progit2.git, Ρ‚ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ master ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

$ git checkout master (1)
$ git pull https://github.com/progit/progit2.git (2) 
$ git push origin master (3)
  1. Если Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ β€” ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master.
  2. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ измСнСния ΠΈΠ· рСпозитория https://github.com/progit/progit2.git ΠΈ ΡΠ»ΠΈΡ‚ΡŒ ΠΈΡ… с Π²Π΅Ρ‚ΠΊΠΎΠΉ master.
  3. ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ master Π² ваш Ρ„ΠΎΡ€ΠΊ origin.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΠΈΡΠ°Ρ‚ΡŒ URL рСпозитория для получСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ достаточно ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎΡ‚ процСсс ΠΌΠΎΠΆΠ½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слСгка ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² настройки:

$ git remote add progit https://github.com/progit/progit2.git (1) 
$ git fetch progit (2)
$ git branch --set-upstream-to=progit/master master (3)
$ git config --local remote.pushDefault origin 4
  1. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ исходный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΈ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ progit.
  2. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ рСпозитория progit, Π² частности Π²Π΅Ρ‚ΠΊΡƒ master.
  3. ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ master Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· рСпозитория progit.
  4. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ origin ΠΊΠ°ΠΊ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ.

ПослС этого, процСсс обновлСния становится Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅:

$ git checkout master 1 $ git pull 2
$ git push 3
  1. Если Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ β€” ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master.
  2. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ измСнСния ΠΈΠ· рСпозитория progit ΠΈ ΡΠ»ΠΈΡ‚ΡŒ ΠΈΡ… с Π²Π΅Ρ‚ΠΊΠΎΠΉ master.
  3. ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ master Π² ваш Ρ„ΠΎΡ€ΠΊ origin.

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ Π»ΠΈΡˆΡ‘Π½ нСдостатков. Git Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠ»Ρ‡Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ дСйствия ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ вас Π² случаС, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² master, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ измСнСния ΠΈΠ· progit ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ всё вмСстС Π² origin β€” всС эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΌ стоит ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ прямоС Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Π²Π΅Ρ‚ΠΊΡƒ master, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эта Π²Π΅Ρ‚ΠΊΠ° фактичСски ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ.


Π‘ΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ВсС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π° GitHub доступны ΠΊΠ°ΠΊ ΠΏΠΎ HTTP https://github.com/<user>/<project_name>, Ρ‚Π°ΠΊ ΠΏΠΎ SSH [email protected]:<user>/<project_name>

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, для общСдоступного ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ HTTPS ссылки, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наличия GitHub Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° для клонирования рСпозитория. ΠŸΡ€ΠΈ этом, для использования SSH ссылки Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ GitHub Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ ΠΈ Π΅Π³ΠΎ SSH ΠΊΠ»ΡŽΡ‡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π’Π°ΠΊ ΠΆΠ΅ HTTPS ссылка ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ совпадаСт с URL адрСсом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ для просмотра вашСго рСпозитория.


Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ участников

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ людьми, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ доступ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Ρ‚ΠΎ Π²Π°ΠΌ слСдуСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ «участников».

Π­Ρ‚ΠΎ прСдоставит ΠΈΠΌ push доступ; это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€Π°Π²Π° доступа ΠΊΠ°ΠΊ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΈ Π½Π° запись Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС Settings

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Collaborators Π² мСню слСва. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΠΏΠΎΠ»Π΅ для Π²Π²ΠΎΠ΄Π° ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Add collaborator.


Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ запросами Π½Π° слияниС

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

Запрос Π½Π° слияниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ вашСго рСпозитория, Ρ‚Π°ΠΊ ΠΈ ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ Ρ„ΠΎΡ€ΠΊΠ° вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠžΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ измСнСния Π² Π²Π΅Ρ‚ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° Π΅Π³ΠΎ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π² ваши, ΠΏΡ€ΠΈ этом для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… запросов Π½Π° слияниС Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ доступа ΠΊ Π²Π΅Ρ‚ΠΊΠ΅ Ρƒ ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ tonychacon ΠΈ создали Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ для Arduino с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ fade.

Email увСдомлСния ΠšΡ‚ΠΎ-Ρ‚ΠΎ вносит измСнСния Π² ваш ΠΊΠΎΠ΄ ΠΈ отправляСт Π²Π°ΠΌ запрос Π½Π° слияниС. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ письмо с ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΎ Π½ΠΎΠ²ΠΎΠΌ запросС слияния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выглядит ΠΊΠ°ΠΊ Π½Π° Email ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ Π½ΠΎΠ²ΠΎΠΌ запросС слияния.

Если Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ строку с тСкстом git pull <url> patch-1, Ρ‚ΠΎ это самый простой способ ΡΠ»ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π±Π΅Π· добавлСния ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория. Π­Ρ‚ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Π»ΠΎΡΡŒ Π² Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ сначала ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ запроса слияния.


ВзаимодСйствиС ΠΏΠΎ запросу слияния

Когда Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΡΠ»ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΡΠ½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ сСбС ΠΈ ΡΠ»ΠΈΡ‚ΡŒ локально, ΡΠ»ΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git pull <url> <branch>, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½Π΅Π΅, ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ ΡΠ»ΠΈΡ‚ΡŒ измСнСния.

Если слияниС Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ просто Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Merge Π½Π° сайтС GitHub. Π­Ρ‚ΠΎ всСгда ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ с созданию ΠΊΠΎΠΌΠΌΠΈΡ‚Π° слияния, Π΄Π°ΠΆΠ΅ Ссли доступно слияниС ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΎΠΉ Π²ΠΏΠ΅Ρ€Ρ‘Π΄. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² любом случаС создаётся ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Merge.

Если Π²Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ Π½Π΅ ΡΠ»ΠΈΠ²Π°Ρ‚ΡŒ запрос, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ запрос Π½Π° слияниС, Π° ΠΎΡ‚ΠΊΡ€Ρ‹Π²ΡˆΠΈΠΉ Π΅Π³ΠΎ участник Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½.


Бсылки Π½Π° запрос слияния

Если Ρƒ вас ΠΌΠ½ΠΎΠ³ΠΎ запросов слияния ΠΈ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ°Ρ‡ΠΊΡƒ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² ΠΈΠ»ΠΈ постоянно Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΉ pull, Ρ‚ΠΎ Ρƒ GitHub Π΅ΡΡ‚ΡŒ Ρ…ΠΈΡ‚Ρ€Ρ‹ΠΉ Ρ‚Ρ€ΡŽΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ это Π΄Π΅Π»Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ Ρ‚Ρ€ΡŽΠΊ ΠΎΡ‡Π΅Π½ΡŒ слоТный, Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΈ ΠΌΡ‹ рассмотрим Π΅Π³ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π² Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ссылок.

ЀактичСски, GitHub прСдставляСт Π²Π΅Ρ‚ΠΊΠΈ запросов слияния ΠΊΠ°ΠΊ псСвдо Π²Π΅Ρ‚ΠΊΠΈ Π½Π° сСрвСрС. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΎΠ½ΠΈ Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² замаскированном Π²ΠΈΠ΄Π΅ ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π½ΠΈΠΌ.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ls-remote (часто упоминаСтся ΠΊΠ°ΠΊ plumbing ΠΊΠΎΠΌΠ°Π½Π΄Π°). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, эта ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² повсСднСвных Git опСрациях, Π½ΠΎ сСйчас ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ ссылки ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° сСрвСрС.

Если Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Ρ‘ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ использованного Ρ€Π°Π½Π΅Π΅ рСпозитория blink, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ список всСх Π²Π΅Ρ‚ΠΎΠΊ, Ρ‚Π΅Π³ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… ссылок Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

 $ git ls-remote https://github.com/schacon/blink
10d539600d86723087810ec636870a504f4fee4d HEAD
10d539600d86723087810ec636870a504f4fee4d refs/heads/master
6a83107c62950be9453aac297bb0193fd743cd6e refs/pull/1/head
afe83c2d1a70674c9505cc1d8b7d380d5e076ed3 refs/pull/1/merge
3c8d735ee16296c242be7a9742ebfbc2665adec1 refs/pull/2/head

Аналогично, Ссли Π²Ρ‹, Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ Π² своём Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git ls-remote origin ΠΈΠ»ΠΈ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ схоТим.

Если Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ находится Π½Π° GitHub ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ запросы слияния, Ρ‚ΠΎ эти ссылки Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ с прСфиксами refs/pull/. По сути это Π²Π΅Ρ‚ΠΊΠΈ, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ находятся Π½Π΅ Π² refs/heads/, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с сСрвСра β€” процСсс получСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса слияния сущСствуСт Π΄Π²Π΅ ссылки, ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… записана Π² /head ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Π²Π΅Ρ‚ΠΊΠ΅ запроса Π½Π° слияниС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ запрос Π½Π° слияниС Π² наш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠ· своСй Π²Π΅Ρ‚ΠΊΠΈ bug-fix, которая ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ a5a775, Ρ‚ΠΎ Π² нашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅Ρ‚ΠΊΠΈ bug-fix (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° находится Π² Ρ„ΠΎΡ€ΠΊΠ΅), ΠΏΡ€ΠΈ этом Ρƒ нас появится pull/<pr#>/head, которая ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° a5a775. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ‚ΡΠ½ΡƒΡ‚ΡŒ всС Π²Π΅Ρ‚ΠΊΠΈ запросов слияния ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π½Π΅ добавляя Π½Π°Π±ΠΎΡ€ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π². Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылки Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

$ git fetch origin refs/pull/958/head
  From https://github.com/libgit2/libgit2
  * branch            refs/pull/958/head -> FETCH_HEAD

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Git: Β«ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡΡŒ ΠΊ origin Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ скачай ссылку refs/pull/958/headΒ». Git с Ρ€Π°Π΄ΠΎΡΡ‚ΡŒΡŽ ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ΡΡ ΠΈ Π²Ρ‹ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ всё Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для построСния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ссылки, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ устанавливаСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² .git/FETCH_HEAD.

Π”Π°Π»Π΅Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ»ΠΈΡ‚ΡŒ измСнСния Π² Π½ΡƒΠΆΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git merge FETCH_HEAD, ΠΎΠ΄Π½Π°ΠΊΠΎ сообщСниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π° слияния Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ странно. Π’Π°ΠΊ ΠΆΠ΅ это становится ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ссли Π²Ρ‹ просматриваСтС ΠΌΠ½ΠΎΠ³ΠΎ запросов Π½Π° слияниС.

БущСствуСт способ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ всС запросы слияния ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌΡƒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» .git/config Π² тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΠΊΡ†ΠΈΡŽ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория origin. Она Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ:

   [remote "origin"]
      url = https://github.com/libgit2/libgit2
      fetch = +refs/heads/*:refs/remotes/origin/*

Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π°ΡΡΡ с fetch =, являСтся спСцификациСй ссылок refspec. Π­Ρ‚ΠΎ способ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ названия Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ названиями Π² локальном ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ .git. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ эта строка Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Git: «всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория ΠΈΠ· refs/heads Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ локально Π² refs/remotes/origin. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ строку спСцификации:

  [remote "origin"]
      url = https://github.com/libgit2/libgit2.git
      fetch = +refs/heads/*:refs/remotes/origin/*
      fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

ПослСдняя строка Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Git: «ВсС ссылки, ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ Π½Π° refs/pull/123/head, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сохранСны локально ΠΊΠ°ΠΊ refs/remotes/origin/pr/123Β». Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git fetch, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅:

 $ git fetch #...
 * [new ref] refs/pull/1/head -> origin/pr/1
 * [new ref] refs/pull/2/head -> origin/pr/2
 * [new ref] refs/pull/4/head -> origin/pr/4
#...

ВсС запросы слияния ΠΈΠ· ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория прСдставлСны Π² локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΊΠ°ΠΊ Π²Π΅Ρ‚ΠΊΠΈ слСТСния; ΠΎΠ½ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ git fetch. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, локальноС тСстированиС ΠΊΠΎΠ΄Π° запроса слияния становится ΠΎΡ‡Π΅Π½ΡŒ простым:

  $ git checkout pr/2
  Checking out files: 100% (3769/3769), done.
  Branch pr/2 set up to track remote branch pr/2 from origin.
  Switched to a new branch 'pr/2'

Запросы слияния Π½Π° запросы слияния

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ запрос слияния Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π²Π΅Ρ‚ΠΊΡƒ master, запросы слияния ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π»ΡŽΠ±ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ любого рСпозитория Π² сСти. По сути, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π°ΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ запрос слияния, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ запрос слияния.

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

ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ запроса Π½Π° слияниС Π²Π²Π΅Ρ€Ρ…Ρƒ страницы Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ мСню для Π²Ρ‹Π±ΠΎΡ€Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΈ исходной Π²Π΅Ρ‚ΠΎΠΊ. Если Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Edit справа, Ρ‚ΠΎ станСт доступным Π²Ρ‹Π±ΠΎΡ€ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ исходной Π²Π΅Ρ‚ΠΊΠΈ, Π° Π΅Ρ‰Ρ‘ ΠΈ Ρ„ΠΎΡ€ΠΊΠ°.

Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ для слияния с Π΄Ρ€ΡƒΠ³ΠΈΠΌ запросом слияния ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ„ΠΎΡ€ΠΊΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Упоминания ΠΈ увСдомлСния

Π’ любом ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ символ @, Ρ‡Ρ‚ΠΎ автоматичСски Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ список автодополнСния с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ просто ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π½Ρ‘ΠΌ.

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


README

Если GitHub ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» Π² вашСм исходном ΠΊΠΎΠ΄Π΅, Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ Π΅Π³ΠΎ Π½Π° Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ страницС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΅Π³ΠΎ для поддСрТания Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ². Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: β€’ Для Ρ‡Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ β€’ Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ установкС β€’ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡŽ

β€’ ΠŸΡ€Π°Π²ΠΈΠ»Π° участия Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π’ этот Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ изобраТСния ΠΈΠ»ΠΈ ссылки для простоты восприятия ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.


CONTRIBUTING

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» - это CONTRIBUTING. Если Π² вашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ„Π°ΠΉΠ» CONTRIBUTING с Π»ΡŽΠ±Ρ‹ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ, Ρ‚ΠΎ GitHub Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ссылку Π½Π° Π½Π΅Π³ΠΎ ΠΏΡ€ΠΈ создании любого запроса Π½Π° слияниС.

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


Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ

ИзмСнСниС основной Π²Π΅Ρ‚ΠΊΠΈ

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π² качСствС основной Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΎΡ‚ master, ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π»ΠΈ запросы Π½Π° слияниС ΠΊ Π½Π΅ΠΉ, Ρ‚ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² настройках рСпозитория Π½Π° Π·Π°ΠΊΠ»Π°Π΄ΠΊΠ΅ Options.

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

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° GitHub, Ρ‚ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ Transfer ownership Π² настройках рСпозитория Π½Π° Π·Π°ΠΊΠ»Π°Π΄ΠΊΠ΅ Options.

Π­Ρ‚Π° опция ΠΏΠΎΠ»Π΅Π·Π½Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΠΌ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ растёт ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π­Ρ‚ΠΎ дСйствиС ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ рСпозитория со всСми Π΅Π³ΠΎ подписчиками ΠΈ Π·Π²Ρ‘Π·Π΄Π°ΠΌΠΈ, Π½ΠΎ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ с вашСго URL Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ. ΠšΡ€ΠΎΠΌΠ΅ этого, измСнятся ссылки для клонирования ΠΈ получСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· Git, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²Π΅Π± запросов.


Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ; просто Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡƒ + Π² ΠΏΡ€Π°Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ страницы GitHub ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ New organization ΠΈΠ· мСню.


ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

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

НапримСр, Ρƒ вашСй ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ рСпозитория: frontend, backend ΠΈ deployscripts. Π’Ρ‹ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваши Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ HTML/CSS/JavaScript ΠΈΠΌΠ΅Π»ΠΈ доступ ΠΊ frontend ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊ backend, Π° ваши администраторы ΠΈΠΌΠ΅Π»ΠΈ доступ ΠΊ backend ΠΈ deployscripts. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ это Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ настраивая доступ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ участника.

Для управлСния ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Π·Π°ΠΊΠ»Π°Π΄ΠΊΡƒ Teams справа Π²Π²Π΅Ρ€Ρ…Ρƒ Π½Π° страницС Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ вас Π½Π° страницу Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈΠ»ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ настройками ΠΈ ΠΏΡ€Π°Π²Π°ΠΌΠΈ доступа.

КаТдая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ доступа ΠΊ рСпозиториям: Β«Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅Β», Β«Ρ‡Ρ‚Π΅Π½ΠΈΠ΅/запись» ΠΈΠ»ΠΈ «администратор». Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ доступа ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ Settings Π½Π° страницС Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Упоминания ΠΊΠΎΠΌΠ°Π½Π΄ @mentions, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ @acmecorp/frontend, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ упоминания ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡŽΡ‚ΡΡ всС Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.


Π–ΡƒΡ€Π½Π°Π» Π°ΡƒΠ΄ΠΈΡ‚Π°

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ всСх происходящих событиях Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½ΠΈΡ…. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ Π½Π° Π·Π°ΠΊΠ»Π°Π΄ΠΊΡƒ Audit Log Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ события Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΡ‚ΠΎ участвовал Π² Π½ΠΈΡ….


К оглавлСнию

Они ΠΏΡ€ΠΈ повсСднСвной Ρ€Π°Π±ΠΎΡ‚Π΅ Π²Π°ΠΌ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ, Π½ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΈΜ†-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ.

Π’Ρ‹Π±ΠΎΡ€ Ρ€Π΅Π²ΠΈΠ·ΠΈΠΈ Git позволяСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈΠ»ΠΈ ΠΈΡ… Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹. Π­Ρ‚ΠΈ способы Π½Π΅ всСгда ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹, Π½ΠΎ ΠΈΡ… ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ.

ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π²ΠΈΠ·ΠΈΠΈ ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΏΠΎ Π΅Π³ΠΎ SHA-1 Ρ…Π΅ΡˆΡƒ


Π‘ΠΎΠΊΡ€Π°Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ SHA-1

Git достаточно ΡƒΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ имССтся Π²Π²ΠΈΠ΄Ρƒ ΠΏΠΎ нСскольким ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ символам Π΅Π³ΠΎ Ρ…Π΅ΡˆΠ°, Ссли указанная Ρ‡Π°ΡΡ‚ΡŒ SHA-1 ΠΈΠΌΠ΅Π΅Ρ‚ Π² Π΄Π»ΠΈΠ½Ρƒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ символа ΠΈ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Π° β€” Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Ρ‚Π°ΠΊΠΈΠΌ частичным SHA-1. НапримСр, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git log ΠΈ нашли ΠΊΠΎΠΌΠΌΠΈΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ:

   $ git log
  commit 1c002dd4b536e7479fe34593e72e6c6c1819e53b
  Author: Scott Chacon <[email protected]>
  Date:   Thu Dec 11 14:58:32 2008 -0800
      Add some blame and merge stuff

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это ΠΊΠΎΠΌΠΌΠΈΡ‚ 1c002dd..... Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ для Π½Π΅Π³ΠΎ git show, Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ эквивалСнты (прСдполагаСтся, Ρ‡Ρ‚ΠΎ сокращСния ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹):

$ git show 1c002dd4b536e7479fe34593e72e6c6c1819e53b
$ git show 1c002dd4b536e7479f
$ git show 1c002d

Git ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ сокращСния для Π²Π°ΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ SHA-1. Если Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ --abbrev-commit ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git log, Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ сокращённыС значСния, ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ; ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сСмь символов, Π½ΠΎ для сохранСния ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ SHA-1 ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ значСния.

$ git log --abbrev-commit --pretty=oneline
  ca82a6d Change the version number
  085bb3b Remove unnecessary test code
  a11bef0 Initial commit

Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΡƒΠΌΠ΅Π΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π­Ρ‚ΠΎ Π² частности ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для управлСния вашими Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ β€” Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ мноТСство Π²Π΅Ρ‚ΠΎΠΊ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² для ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° вопрос Β«Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ сдСлано Π² этой Π²Π΅Ρ‚ΠΊΠ΅, Ρ‡Ρ‚ΠΎ я Π΅Ρ‰Ρ‘ Π½Π΅ слил Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ?Β»


Π”Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ

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

Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ находится Π² вашСй ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅, которая Π΅Ρ‰Ρ‘ Π½Π΅ Π±Ρ‹Π»Π° слита Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Git ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π² Π»ΠΎΠ³Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ запись master..experiment β€” ΠΎΠ½Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ доступны ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ experiment, Π½ΠΎ Π½Π΅ доступны ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ masterΒ». Для краткости ΠΈ наглядности Π² этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… вмСсто настоящСго Π²Ρ‹Π²ΠΎΠ΄Π° Π»ΠΎΠ³Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈΡ… Π±ΡƒΠΊΠ²Π΅Π½Π½Ρ‹Π΅ обозначСния ΠΈΠ· Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, располагая ΠΈΡ… Π² Π΄ΠΎΠ»ΠΆΠ½ΠΎΠΌ порядкС:

  $ git log master..experiment
  D
  C

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π²Π΅Ρ‚ΠΊΠΈ master, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² Π²Π΅Ρ‚ΠΊΠ΅ experiment, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Π²Π΅Ρ‚ΠΎΠΊ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅. ΠŸΡ€ΠΈ использовании записи experiment..master Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π²Π΅Ρ‚ΠΊΠΈ master, нСдоступныС ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ experiment:

  $ git log experiment..master
  F
  E

Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ experiment Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии ΠΈ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ измСнСния Π½ΡƒΠΆΠ½ΠΎ Π² Π½Π΅Π΅ ΡΠ»ΠΈΡ‚ΡŒ. Π”Ρ€ΡƒΠ³ΠΎΠ΅ частоС использованиС Ρ‚Π°ΠΊΠΎΠ³ΠΎ синтаксиса β€” просмотр Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

  $ git log origin/master..HEAD

Вакая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π²Π°ΠΌ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ вашСй Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π²Π΅Ρ‚ΠΊΠ΅ master ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория origin. Если Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git push, Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ Π½Π° Π²Π΅Ρ‚ΠΊΠ΅, ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ origin/master, Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΡ‘Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git log origin/master..HEAD, Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Π΅ΠΌΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ отправятся Π½Π° сСрвСр.


ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Π°Ρ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ°

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

  $ git log refA..refB
  $ git log ^refA refB
  $ git log refB --not refA

Π­Ρ‚ΠΎΡ‚ синтаксис ΡƒΠ΄ΠΎΠ±Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ позволяСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² запросС Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… ссылок, Ρ‡Π΅Π³ΠΎ Π½Π΅ позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ синтаксис с двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, доступныС ΠΈΠ· refA ΠΈ refB, Π½ΠΎ Π½Π΅ доступныС ΠΈΠ· refC, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄:

  $ git log refA refB ^refC
  $ git log refA refB --not refC

Π’Ρ€ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ

ПослСдний основной способ Π²Ρ‹Π±ΠΎΡ€Π° Ρ€Π΅Π²ΠΈΠ·ΠΈΠΉ β€” это синтаксис с трСмя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ всС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, доступныС хотя Π±Ρ‹ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ссылки, Π½ΠΎ Π½Π΅ ΠΈΠ· ΠΎΠ±Π΅ΠΈΡ… сразу. ВспомнитС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² ΠŸΡ€ΠΈΠΌΠ΅Ρ€ истории для Π²Ρ‹Π±ΠΎΡ€Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π΅ΡΡ‚ΡŒ Π»ΠΈΠ±ΠΎ Π² Π²Π΅Ρ‚ΠΊΠ΅ master, Π»ΠΈΠ±ΠΎ Π² experiment, Π½ΠΎ Π½Π΅ Π² ΠΎΠ±Π΅ΠΈΡ… сразу, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:

  $ git log master...experiment
  F
  E
  D
  C

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° снова Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΆΡƒΡ€Π½Π°Π» ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π½ΠΎ Π² Π½Π΅ΠΌ содСрТится информация Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ± этих Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ…, Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ отсортированная ΠΏΠΎ Π΄Π°Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².

Π’ Ρ‚Π°ΠΊΠΈΡ… случаях с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ log часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠΏΡ†ΠΈΡŽ --left-right, которая ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ сторону Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π» сдСлан ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΄Π°Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ:

$ git log --left-right master...experiment 
  <F
  <E
  >D
  >C

ΠŸΡ€ΠΈΠΏΡ€ΡΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈ очистка

Часто ΠΏΠΎΠΊΠ° Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π½Π°Π΄ ΠΎΠ΄Π½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ всё находится Π² бСспорядкС, Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ ΠΈ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π΅Ρ‰Ρ‘. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ этом Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ ΡΠ΄Π΅Π»Π°Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΉ ΠΏΠΎΠ·ΠΆΠ΅. Π‘ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с Π½Π΅ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° git stash.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ stash Π±Π΅Ρ€Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠ΅ состояниС вашСго Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ отслСТиваСмыС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ проиндСксированныС измСнСния, ΠΈ сохраняСт ΠΈΡ… Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π² любоС врСмя ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.


ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° git stash push

Π’ ΠΊΠΎΠ½Ρ†Π΅ октября 2017 Π³ΠΎΠ΄Π° Π² спискС рассылки Git ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΎ ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠ΅ обсуТдСниС, ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° git stash save ΠΏΡ€ΠΈΠ·Π½Π°Π½Π° ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ git stash push. Основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° этого Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² git stash push Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ спСцификации ΠΏΡƒΡ‚ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ git stash save.

Команда git stash save Π½Π΅ исчСзнСт Π² блиТайшСС врСмя, поэтому Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ ΠΎ Π΅Ρ‘ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠΏΠ°ΠΆΠ΅. Но Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° push для использования Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.


ΠŸΡ€ΠΈΠΏΡ€ΡΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π²Π°ΡˆΠΈΡ… Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π² свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π°Ρ‡Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нСсколькими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² индСкс измСнСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…. Если Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git status, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ вашС ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠ΅ состояниС:

$ git status
  Changes to be committed:
    (use "git reset HEAD <file>..." to unstage)
      modified:   index.html
  Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working directory)
      modified:   lib/simplegit.rb

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ, Π½ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ваши Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ; поэтому Π²Ρ‹ припрячСтС эти измСнСния. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ для этого ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git stash ΠΈΠ»ΠΈ git stash push:

  $ git stash
  Saved working directory and index state \
    "WIP on master: 049d078 Create index file"
  HEAD is now at 049d078 Create index file
  (To restore them type "git stash apply")

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ рабочая копия Π½Π΅ содСрТит ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

  $ git status
  # On branch master
  nothing to commit, working directory clean

Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² любой; ваши измСнСния сохранСны. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список припрятанных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git stash list:

  $ git stash list
  stash@{0}: WIP on master: 049d078 Create index file
  stash@{1}: WIP on master: c264051 Revert "Add file_size"
  stash@{2}: WIP on master: 21d80a5 Add number to log

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»ΠΈ припрятаны Π΄Π²Π° измСнСния, поэтому Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ доступны Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ припрятанныС измСнСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ исходной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹: git stash apply.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… припрятанных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΅Π³ΠΎ имя, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ: git stash apply stash@{2}. Если Π²Ρ‹ Π½Π΅ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ имя, Ρ‚ΠΎ Git попытаСтся Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ самоС послСднСС припрятанноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅:

$ git stash apply
  On branch master
  Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working directory)
      modified:   index.html
      modified:   lib/simplegit.rb
  no changes added to commit (use "git add" and/or "git commit -a")

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

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

БпрятанныС измСнСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΊ вашим Ρ„Π°ΠΉΠ»Π°ΠΌ, Π½ΠΎ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ€Π°Π½Π΅Π΅ добавляли Π² индСкс, Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‚ΡƒΠ΄Π° снова. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Π±Ρ‹Π»ΠΎ сдСлано, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ git stash apply с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ --index, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π° попытаСтся Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ измСнСния Π² индСксС. Если Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ восстановитС вашС исходноС состояниС:

$ git stash apply --index
  On branch master
  Changes to be committed:
    (use "git reset HEAD <file>..." to unstage)
      modified:   index.html
  Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working directory)
      modified:   lib/simplegit.rb

Команда apply Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пытаСтся Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ припрятанныС Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ β€” ΠΏΡ€ΠΈ этом ΠΎΠ½ΠΈ останутся Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΡ…, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git stash drop, ΡƒΠΊΠ°Π·Π°Π² имя удаляСмых ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

$ git stash list
  stash@{0}: WIP on master: 049d078 Create index file
  stash@{1}: WIP on master: c264051 Revert "Add file_size"
  stash@{2}: WIP on master: 21d80a5 Add number to log
  $ git stash drop stash@{0}
  Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43)

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git stash pop, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ припрятанныС измСнСния ΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΡ… ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.


НСобычноС припрятываниС

Π£ припрятанных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΅ΡΡ‚ΡŒ нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ β€” это использованиС довольно популярной ΠΎΠΏΡ†ΠΈΠΈ --keep-index с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git stash. Она просит Git Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² индСкс, Π½ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ это Π² индСксС.

$ git status -s
  M  index.html
  M lib/simplegit.rb
$ git stash --keep-index
  Saved working directory and index state WIP on master: 1b65b17 added the index file
  HEAD is now at 1b65b17 added the index file
$ git status -s
  M  index.html

Π”Ρ€ΡƒΠ³ΠΎΠΉ распространённый Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ β€” это ΠΏΡ€ΠΈΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠΌΠΈΠΌΠΎ отслСТиваСмых Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ нСотслСТиваСмыС. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ git stash Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ ΠΈ проиндСксированныС отслСТиваСмыС Ρ„Π°ΠΉΠ»Ρ‹. Если Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ --include-untracked ΠΈΠ»ΠΈ -u, Git Ρ‚Π°ΠΊΠΆΠ΅ припрячСт всС нСотслСТиваСмыС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ создали. Однако Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ этой ΠΎΠΏΡ†ΠΈΠΈ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ с явным ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ; Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ --all (ΠΈΠ»ΠΈ просто -a).

$ git status -s
  M  index.html
  M lib/simplegit.rb
  ?? new-file.txt
$ git stash -u
  Saved working directory and index state WIP on master: 1b65b17 added the index file
  HEAD is now at 1b65b17 added the index file
$ git status -s

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ ΠΈΠ· припрятанных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Если Π²Ρ‹ спрятали Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния, оставили ΠΈΡ… Π½Π° врСмя, Π° сами ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π²Π΅Ρ‚ΠΊΠ΅, Ρƒ вас ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с восстановлСниСм Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ. Если восстановлСниС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° сохранСния Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ, Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ слияния ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Π³ΠΎ.

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

$ git stash branch testchanges
  M   index.html
  M   lib/simplegit.rb
  Switched to a new branch 'testchanges'
  On branch testchanges
  Changes to be committed:
    (use "git reset HEAD <file>..." to unstage)
      modified:   index.html
  Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working directory)
      modified:   lib/simplegit.rb
  Dropped refs/stash@{0} (29d385a81d163dfd45a452a2ce816487a6b8b014)

Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ сокращСниС для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»Π΅Π³ΠΊΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ припрятанныС измСнСния ΠΈ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Π½ΠΈΠΌΠΈ Π² Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅.


ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

НаконСц, Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π½Π΅ ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² вашСм Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π° просто ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π½ΠΈΡ…. Команда git clean сдСлаСт это для вас.

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

Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, ΠΎΡ‡Π΅Π½ΡŒ часто нСльзя Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ содСрТимоС Ρ‚Π°ΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π‘ΠΎΠ»Π΅Π΅ бСзопасным Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ являСтся использованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git stash --all для удалСния всСго, Π½ΠΎ с сохранСниСм этого Π² Π²ΠΈΠ΄Π΅ припрятанных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ мусор ΠΈ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ваш Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³; Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git clean. Для удалСния всСх нСотслСТиваСмых Ρ„Π°ΠΉΠ»ΠΎΠ² Π² вашСм Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git clean -f -d, которая ΡƒΠ΄Π°Π»ΠΈΡ‚ всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ всС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ станут пустыми.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -f (сокращСниС ΠΎΡ‚ слова force β€” Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, подчСркивая, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΈ трСбуСтся, Ссли пСрСмСнная ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Git clean.requireForce явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ установлСна Π² false.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ сдСлано, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -n, которая ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ скаТи ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ Π±ΡƒΠ΄Π΅ΡˆΡŒ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ.

$ git clean -d -n
  Would remove test.o
  Would remove tmp/

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π° git clean Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСотслСТиваСмыС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² список ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ….

Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ сдСлаСт ΠΏΡ€ΠΈ запускС ΠΊΠΎΠΌΠ°Π½Π΄Π° git clean, всСгда сначала выполняйтС Π΅Ρ‘ с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -n, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΄Π²Π°ΠΆΠ΄Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ -n Π½Π° -f ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ настоящСй очистки. Π”Ρ€ΡƒΠ³ΠΎΠΉ способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Π°ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сам процСсс β€” это Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -i (Π² Β«ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΒ» Ρ€Π΅ΠΆΠΈΠΌΠ΅). НиТС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° очистки Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

$ git clean -x -i
Would remove the following items:
  build.TMP  test.o
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers
4: ask each 5: quit 6: help
What now>

Поиск

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

Команда git grep

Git поставляСтся с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ grep, которая позволяСт Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈΠ»ΠΈ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΠΎ строкС ΠΈΠ»ΠΈ рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΌΡ‹ обратимся ΠΊ исходному ΠΊΠΎΠ΄Ρƒ самого Git.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΡ‰Π΅Ρ‚ ΠΏΠΎ Ρ„Π°ΠΉΠ»Π°ΠΌ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π’ качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² -n ΠΈΠ»ΠΈ --line-number, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° строк, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Git нашСл совпадСния:

$ git grep -n gmtime_r
compat/gmtime.c:3:#undef gmtime_r
compat/gmtime.c:8:      return git_gmtime_r(timep, &result);
compat/gmtime.c:11:struct tm *git_gmtime_r(const time_t *timep, struct tm *result)
compat/gmtime.c:16:     ret = gmtime_r(timep, result);

НапримСр, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ всС совпадСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ git grep ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠΊΠ°Π·Π°Π² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ совпадСния, вмСстС с количСством этих совпадСний Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Для этого потрСбуСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -c ΠΈΠ»ΠΈ --count:

$ git grep --count gmtime_r
  compat/gmtime.c:4
  compat/mingw.c:1
  compat/mingw.h:1
  date.c:3
  git-compat-util.h:2

Если вас интСрСсуСт контСкст строки поиска, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ присутствуСт совпадСниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -p ΠΈΠ»ΠΈ --show-function:

$ git grep -p gmtime_r *.c
  date.c=static int match_multi_number(timestamp_t num, char c, const char *date,
  date.c:         if (gmtime_r(&now, &now_tm))
  date.c=static int match_digit(const char *date, struct tm *tm, int *offset, int
  *tm_gmt)
  date.c:         if (gmtime_r(&time, tm)) {
  date.c=int parse_date_basic(const char *date, timestamp_t *timestamp, int *offset)
  date.c:         /* gmtime_r() in match_digit() may have clobbered it */

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ слоТныС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ строк, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ†ΠΈΡŽ --and, которая Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ сразу нСсколько совпадСний.

НапримСр, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΈΡ‰Π΅ΠΌ Π»ΡŽΠ±Ρ‹Π΅ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ константу, имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТит Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· подстрок LINK ΠΈΠ»ΠΈ BUF_MAX, особСнно Π² Π±ΠΎΠ»Π΅Π΅ старой вСрсии ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ Git, прСдставлСнной Ρ‚Π΅Π³ΠΎΠΌ v1.8.0 (ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ --break ΠΈ --heading, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ вывСсти Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ Π²ΠΈΠ΄Π΅):

$ git grep --break --heading \
      -n -e '#define' --and \( -e LINK -e BUF_MAX \) v1.8.0
 v1.8.0:builtin/index-pack.c
62:#define FLAG_LINK (1u<<20)
v1.8.0:cache.h
73:#define S_IFGITLINK  0160000
74:#define S_ISGITLINK(m)
(((m) & S_IFMT) == S_IFGITLINK)

Поиск Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ Git

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅ Π½Π΅ Π³Π΄Π΅ присутствуСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ сущСствовало ΠΈΠ»ΠΈ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ. Команда git log ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ инструмСнтами для поиска ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΏΠΎ содСрТимому ΠΈΡ… сообщСний ΠΈΠ»ΠΈ содСрТимому сдСланных Π² Π½ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ, ΠΊΠΎΠ³Π΄Π° Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° константа ZLIB_BUF_MAX, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ -S ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Git ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π° эта строка.

$ git log -S ZLIB_BUF_MAX --oneline
  e01503b zlib: allow feeding more than 4GB in one go
  ef49a7a zlib: zlib can only process 4GB at a time

Если ΠΌΡ‹ посмотрим Π½Π° измСнСния, сдСланныС Π² этих ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ…, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ef49a7a константа Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π°, Π° Π² e01503b β€” ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТноС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ -G ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.


Поиск ΠΏΠΎ ΠΆΡƒΡ€Π½Π°Π»Ρƒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ строки

Π”Ρ€ΡƒΠ³ΠΎΠΉ, довольно ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ, поиск ΠΏΠΎ истории, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ β€” поиск ΠΏΠΎ истории ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ строки. ΠŸΡ€ΠΎΡΡ‚ΠΎ запуститС git log с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -L, ΠΈ ΠΎΠ½ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ измСнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ строки ΠΊΠΎΠ΄Π° Π² вашСй ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅.

НапримСр, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС измСнСния, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ git_deflate_bound Π² Ρ„Π°ΠΉΠ»Π΅ zlib.c, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git log -L :git_deflate_bound:zlib.c. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° постараСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ поиск ΠΏΠΎ истории ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ всС измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ сдСланы с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° создания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Если для вашСго языка программирования Git Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ поиск ΠΊΠ°ΠΊ ΠΈ прСдыдущая git log -L '/unsigned long git_deflate_bound/',/^}/:zlib.c. Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» строк ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ строки ΠΈ Π² этом случаС Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.


ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ истории

Π’ частности, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ порядок ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², сообщСния ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ… Ρ„Π°ΠΉΠ»Ρ‹, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ вмСстС ΠΈΠ»ΠΈ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° части, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ β€” Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ своими Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ.

ИзмСнСниС послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°

ИзмСнСниС вашСго послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ частоС исправлСниС истории, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ. НаиболСС часто с вашим послСдним ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π΅ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сообщСниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ сдСланный снимок, Π΄ΠΎΠ±Π°Π²ΠΈΠ², ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΠ² Ρ„Π°ΠΉΠ»Ρ‹.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сообщСниС вашСго послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, это ΠΎΡ‡Π΅Π½ΡŒ просто:

$ git commit --amend

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ Π² вашСм тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ сообщСниС вашСго послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π΅Π³ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Когда Π²Ρ‹ сохранитС Π΅Π³ΠΎ ΠΈ Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅Ρ‚ создан Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, содСрТащий это сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ вашим послСдним ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ.

Если Π²Ρ‹ создали ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ зафиксированный снимок, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Ρ„Π°ΠΉΠ»Ρ‹ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вновь созданный Ρ„Π°ΠΉΠ», ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π»ΠΈ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚), Ρ‚ΠΎ процСсс выглядит Π² основном Ρ‚Π°ΠΊ ΠΆΠ΅. Π’Ρ‹ добавляСтС Π² индСкс Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния, рСдактируя Ρ„Π°ΠΉΠ» ΠΈ выполняя для Π½Π΅Π³ΠΎ git add ΠΈΠ»ΠΈ git rm для отслСТиваСмого Ρ„Π°ΠΉΠ»Π°, Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° git commit --amend Π±Π΅Ρ€Π΅Ρ‚ Π²Π°ΡˆΡƒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Ρ‘ снимок для Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ остороТными, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот ΠΏΡ€ΠΈΡ‘ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ этом измСняСтся SHA-1 ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΈ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ rebase β€” Π½Π΅ измСняйтС ваш послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, Ссли Π²Ρ‹ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π² ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли измСнСния Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ (исправлСниС ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚ Π·Π°Π±Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°), Ρ‚ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ сообщСниС Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ; Ρ‡Ρ‚ΠΎΠ±Ρ‹ лишний Ρ€Π°Π· Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, просто Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² индСкс ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

$ git commit --amend --no-edit

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Ρ‚ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎ врСмя ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ пСрСбазирования rebase -i. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ слово drop ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, ΠΈΠ»ΠΈ просто ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΈΠ· списка:

  pick 461cb2a This commit is OK
  drop 5aecc10 This commit is broken

Из-Π·Π° Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Git создаёт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π²Π»Π΅Ρ‡Ρ‘Ρ‚ Π·Π° собой ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ всСх ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π§Π΅ΠΌ дальшС Π²Ρ‹ Π²Π΅Ρ€Π½Ρ‘Ρ‚Π΅ΡΡŒ Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Ρ‚Π΅ΠΌ большС ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² потрСбуСтся ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ мноТСство ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² слияния, особСнно Ссли Ρƒ вас ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ.

Если Π²ΠΎ врСмя ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ пСрСбазирования Π²Ρ‹ поняли, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»Π° Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ идСя, Ρ‚ΠΎ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git rebase --abort ΠΈ ваш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ вСрнётся Π² Ρ‚ΠΎ состояниС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π±Ρ‹Π» Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° пСрСбазирования.

Если Π²Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ это Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ β€” Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git reflog, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ вашСй Π²Π΅Ρ‚ΠΊΠΈ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ reflog ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ВосстановлСниС Π΄Π°Π½Π½Ρ‹Ρ… Π³Π»Π°Π²Ρ‹ 10.

Π”Ρ€ΡŽ Π”Π΅Π²ΠΎ создал практичСскоС руководство с упраТнСниями ΠΏΠΎ использованию git rebase. Найти Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ здСсь: https://git-rebase.io/


РаскрытиС Ρ‚Π°ΠΉΠ½ reset

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Π±ΠΎΠ»Π΅Π΅ спСциализированными ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ reset ΠΈ checkout. Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ каТутся самыми нСпонятными ΠΈΠ· всСх, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π² Git, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ с Π½ΠΈΠΌΠΈ. Они Π΄Π΅Π»Π°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΠΎ-настоящСму ΠΈΡ… ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ каТутся Π±Π΅Π·Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌΠΈ.


Π’Ρ€ΠΈ Π΄Π΅Ρ€Π΅Π²Π°

Π Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ reset ΠΈ checkout Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅, Ссли ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Git управляСт содСрТимым Ρ‚Ρ€Ρ‘Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π². Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠ΄ Β«Π΄Π΅Ρ€Π΅Π²ΠΎΠΌΒ» ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ Β«Π½Π°Π±ΠΎΡ€ Ρ„Π°ΠΉΠ»ΠΎΠ²Β», Π° Π½Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ…. (Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях индСкс Π²Π΅Π΄Π΅Ρ‚ сСбя Π½Π΅ совсСм Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π΄Π΅Ρ€Π΅Π²ΠΎ, Π½ΠΎ для Π½Π°ΡˆΠΈΡ… Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ.) Π’ своих ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… опСрациях Git управляСт трСмя Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ

Π”Π΅Ρ€Π΅Π²ΠΎ          НазначСниС
HEAD            Π‘Π½ΠΈΠΌΠΎΠΊ послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ
ИндСкс          Π‘Π½ΠΈΠΌΠΎΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π°ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°
Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ ΠŸΠ΅ΡΠΎΡ‡Π½ΠΈΡ†Π°

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ HEAD

HEAD β€” это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, которая, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, сдСланный Π² этой Π²Π΅Ρ‚ΠΊΠ΅. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ HEAD Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ созданного ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, самоС простоС ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ HEAD снимком вашСго послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

ИндСкс

ИндСкс β€” это ваш ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ это понятиС ΠΊΠ°ΠΊ Β«ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉΒ» Git β€” Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Git просматриваСт, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ выполняСтС git commit. Git заполняСт индСкс списком ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ содСрТимого всСх Ρ„Π°ΠΉΠ»ΠΎΠ², Π²Ρ‹Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Π² послСдний Ρ€Π°Π· Π² ваш Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ замСняСтС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΡ… Π½ΠΎΠ²Ρ‹ΠΌΠΈ вСрсиями ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° git commit ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ измСнСния Π² Π΄Π΅Ρ€Π΅Π²ΠΎ для Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

ВСхничСски, индСкс Π½Π΅ являСтся Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΉ структурой, Π½Π° самом Π΄Π΅Π»Π΅, ΠΎΠ½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ сТатый список flattened manifest β€” Π½ΠΎ для Π½Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ Ρ‚Π°ΠΊΠΎΠ³ΠΎ прСдставлСния Π±ΡƒΠ΄Π΅Ρ‚ достаточно.


Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³

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

$ tree 
.
β”œβ”€β”€ README
β”œβ”€β”€ Rakefile 
└── lib
     └── simplegit.rb 
1 directory, 3 files

ВСхнологичСский процСсс

ОсновноС ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Git β€” это сохранСниС снимков ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‰ΠΈΡ…ΡΡ состояний вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΏΡƒΡ‚Ρ‘ΠΌ управлСния этими трСмя Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ.

image

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим этот процСсс: ΠΏΡƒΡΡ‚ΡŒ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π² Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, содСрТащий ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ». Π”Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ этого Ρ„Π°ΠΉΠ»Π° Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ v1 ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π³ΠΎΠ»ΡƒΠ±Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git init, которая создаст Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ссылка HEAD Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π΅Ρ‰Ρ‘ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ (master ΠΏΠΎΠΊΠ° Π½Π΅ сущСствуСт).

image

На Π΄Π°Π½Π½ΠΎΠΌ этапС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ Π Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³Π° содСрТит Π΄Π°Π½Π½Ρ‹Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ этот Ρ„Π°ΠΉΠ», поэтому ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ git add для копирования содСрТимого Π Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² ИндСкс.

image

Π—Π°Ρ‚Π΅ΠΌ, ΠΌΡ‹ выполняСм ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git commit, которая сохраняСт содСрТимоС ИндСкса ΠΊΠ°ΠΊ нСизмСняСмый снимок, создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° этот снимок, ΠΈ обновляСт master Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π» Π½Π° этот ΠΊΠΎΠΌΠΌΠΈΡ‚.

image

Если сСйчас Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git status, Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС Ρ‚Ρ€ΠΈ Π΄Π΅Ρ€Π΅Π²Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ внСсти измСнСния Π² Ρ„Π°ΠΉΠ» ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. ΠœΡ‹ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘ΠΌ Ρ‡Π΅Ρ€Π΅Π· всё Ρ‚Ρƒ ΠΆΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ; сначала ΠΌΡ‹ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ Ρ„Π°ΠΉΠ» Π² нашСм Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ эту Π²Π΅Ρ€ΡΠΈΡŽ Ρ„Π°ΠΉΠ»Π° v2 ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ красным Ρ†Π²Π΅Ρ‚ΠΎΠΌ.

image

Если сСйчас ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ git status, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π²Ρ‹Π΄Π΅Π»Π΅Π½ красным Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ «ИзмСнСния, Π½Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚ΡƒΒ», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅Π³ΠΎ прСдставлСния Π² ИндСксС ΠΈ Π Π°Π±ΠΎΡ‡Π΅ΠΌ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ git add для этого Ρ„Π°ΠΉΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ИндСкс.

image

Если сСйчас ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ git status, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ этот Ρ„Π°ΠΉΠ» Π²Ρ‹Π΄Π΅Π»Π΅Π½ Π·Π΅Π»Ρ‘Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ «ИзмСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½Ρ‹Β», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ИндСкс ΠΈ HEAD Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ β€” Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, наш ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ сСйчас отличаСтся ΠΎΡ‚ нашСго послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. НаконСц, ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ git commit, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚.

image

БСйчас ΠΊΠΎΠΌΠ°Π½Π΄Π° git status Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ снова всС Ρ‚Ρ€ΠΈ Π΄Π΅Ρ€Π΅Π²Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅.

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΎΠΊ ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ проходят Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ процСсс. Когда Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ΡΡŒ checkout Π½Π° Π²Π΅Ρ‚ΠΊΡƒ, HEAD Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, ваш ИндСкс замСщаСтся снимком ΠΊΠΎΠΌΠΌΠΈΡ‚Π° этой Π²Π΅Ρ‚ΠΊΠΈ, ΠΈ Π·Π°Ρ‚Π΅ΠΌ содСрТимоС ИндСкса копируСтся Π² ваш Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³.


НазначСниС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ reset

Команда reset становится Π±ΠΎΠ»Π΅Π΅ понятной, Ссли Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Ρ‘ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ снова ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ» file.txt ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π² Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Ρ€Π°Π·.

image

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ прослСдим, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ происходит ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ reset. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° простым ΠΈ прСдсказуСмым способом управляСт трСмя Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π² Git. Она выполняСт Ρ‚Ρ€ΠΈ основных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π¨Π°Π³ 1: ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ указатСля HEAD

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ сдСлаСт reset β€” пСрСмСстит Ρ‚ΠΎ, Π½Π° Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ HEAD. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, измСняСтся Π½Π΅ сам HEAD (Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ checkout); reset ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π²Π΅Ρ‚ΠΊΡƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ HEAD. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ master (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ сСйчас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Π²Π΅Ρ‚ΠΊΠΎΠΉ master), Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git reset 9e5e6a4 сдСлаСт Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ master Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° 9e5e6a4.

image

НС Π²Π°ΠΆΠ½ΠΎ с ΠΊΠ°ΠΊΠΈΠΌΠΈ опциями Π²Ρ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ reset с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° (reset Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΡƒΡ‚ΠΈ), ΠΎΠ½Π° всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ спСрва ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ шаг. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ reset --soft Π½Π° этом Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ остановится.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ взглянитС Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΠΏΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ: фактичСски Π±Ρ‹Π»Π° ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π° послСдняя ΠΊΠΎΠΌΠ°Π½Π΄Π° git commit. Когда Π²Ρ‹ выполняСтС git commit, Git создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½Π° Π½Π΅Π³ΠΎ Π²Π΅Ρ‚ΠΊΡƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ HEAD. Если Π²Ρ‹ выполняСтС reset Π½Π° HEAD~ (родитСля HEAD), Ρ‚ΠΎ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ ΠΎΠ½Π° Π±Ρ‹Π»Π° Ρ€Π°Π½ΡŒΡˆΠ΅, Π½Π΅ измСняя ΠΏΡ€ΠΈ этом Π½ΠΈ ИндСкс, Π½ΠΈ Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ИндСкс ΠΈ снова Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git commit, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ добиваясь Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° git commit --amend (смотритС ИзмСнСниС послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°).

Шаг 2: ОбновлСниС ИндСкса --mixed

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ссли сСйчас Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git status, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ Π·Π΅Π»Ρ‘Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ измСнСния ΠΌΠ΅ΠΆΠ΄Ρƒ ИндСксом ΠΈ Π½ΠΎΠ²Ρ‹ΠΌ HEAD. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ, Ρ‡Ρ‚ΠΎ сдСлаСт reset, Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ИндСкса содСрТимым Ρ‚ΠΎΠ³ΠΎ снимка, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ HEAD.

image

Если Π²Ρ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΎΠΏΡ†ΠΈΡŽ --mixed, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ reset остановится Π½Π° этом шагС. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, поэтому Ссли Π²Ρ‹ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ совсСм Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠΏΡ†ΠΈΠΉ (Π² нашСм случаС git reset HEAD~), Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ остановится Π½Π° этом шагС.

Π‘Π½ΠΎΠ²Π° взглянитС Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΠΏΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ: ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ваш послСдний commit, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² индСкс всСх Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Ρ‹ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΠ»ΠΈΡΡŒ Π½Π°Π·Π°Π΄ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ git add ΠΈ git commit.

Π¨Π°Π³ 3: ОбновлСниС Π Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³Π° --hard Π’Ρ€Π΅Ρ‚ΡŒΠ΅, Ρ‡Ρ‚ΠΎ сдСлаСт reset β€” это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ вашСго Π Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΈ ИндСкс. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ --hard, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΎ Π΄ΠΎ этого шага.

image

Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, Ρ‡Ρ‚ΠΎ сСйчас ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ. Π’Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΠ»ΠΈ ваш послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ git add ΠΈ git commit, Π° Ρ‚Π°ΠΊΠΆΠ΅ всС измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ сдСлали Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ этого Ρ„Π»Π°Π³Π° --hard Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ reset опасной, это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΡ… случаСв, ΠΊΠΎΠ³Π΄Π° Git Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ удаляСт Π΄Π°Π½Π½Ρ‹Π΅. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ reset Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π½ΠΎ ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ ΠΎΠΏΡ†ΠΈΠΈ --hard ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ пСрСзаписываСт Ρ„Π°ΠΉΠ»Ρ‹ Π² Π Π°Π±ΠΎΡ‡Π΅ΠΌ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС, вСрсия v3 нашСго Ρ„Π°ΠΉΠ»Π° всё Π΅Ρ‰Ρ‘ остаётся Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Git ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Ρ‘, просматривая наш reflog, Π½ΠΎ Ссли Π²Ρ‹ Π½Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΠ»ΠΈ эту Π²Π΅Ρ€ΡΠΈΡŽ, Git ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Ρ„Π°ΠΉΠ» ΠΈ Π΅Ρ‘ ΡƒΠΆΠ΅ нСльзя Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ.


РСзюмС

Команда reset Π² Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ порядкС пСрСзаписываСт Ρ‚Ρ€ΠΈ Π΄Π΅Ρ€Π΅Π²Π° Git, ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡŒ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΅ΠΉ скаТСтС:

  1. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π²Π΅Ρ‚ΠΊΡƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ HEAD (останавливаСтся Π½Π° этом, Ссли ΡƒΠΊΠ°Π·Π°Π½Π° опция --soft)
  2. Π”Π΅Π»Π°Π΅Ρ‚ ИндСкс Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ HEAD (останавливаСтся Π½Π° этом, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π° опция --hard)
  3. Π”Π΅Π»Π°Π΅Ρ‚ Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ИндСкс.

Reset с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΡƒΡ‚ΠΈ

Основной Ρ„ΠΎΡ€ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ reset (Π±Π΅Π· ΠΎΠΏΡ†ΠΈΠΉ --soft ΠΈ --hard) Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’ этом случаС, reset пропустит ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг, Π° Π½Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг пропускаСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ HEAD являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ частично Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π° частично Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Но ИндСкс ΠΈ Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ частично, поэтому reset выполняСт шаги 2 ΠΈ 3.

Π˜Ρ‚Π°ΠΊ, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git reset file.txt. Π­Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠ° записи (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π½ΠΈ SHA-1 ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π½ΠΈ Π²Π΅Ρ‚ΠΊΡƒ, Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΉ --soft ΠΈΠ»ΠΈ --hard) являСтся сокращСниСм для git reset --mixed HEAD file.txt, которая:

  1. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π²Π΅Ρ‚ΠΊΡƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ HEAD (Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ)
  2. Π”Π΅Π»Π°Π΅Ρ‚ ИндСкс Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ HEAD (остановится здСсь) Π’ΠΎ Π΅ΡΡ‚ΡŒ, фактичСски, ΠΎΠ½Π° ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ» file.txt ΠΈΠ· HEAD Π² ИндСкс.

image

Π­Ρ‚ΠΎ создаСт эффСкт ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ индСксации Ρ„Π°ΠΉΠ»Π°. Если Π²Ρ‹ посмотритС Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git add, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΈΡ… дСйствия прямо ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Π΅.

image

ИмСнно поэтому Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ git status прСдлагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ индСксации Ρ„Π°ΠΉΠ»Π°. (Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ подробности Π² ΠžΡ‚ΠΌΠ΅Π½Π° индСксации Ρ„Π°ΠΉΠ»Π°.)

ΠœΡ‹ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Git Β«Π±Ρ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΠΈΠ· HEADΒ», ΡƒΠΊΠ°Π·Π°Π² ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ этого Ρ„Π°ΠΉΠ»Π°. Для этого ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ git reset eb43bf file.txt.

image

МоТно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ, фактичСски, ΠΌΡ‹ Π² Π Π°Π±ΠΎΡ‡Π΅ΠΌ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ содСрТимоС Ρ„Π°ΠΉΠ»Π° ΠΊ вСрсии v1, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ для Π½Π΅Π³ΠΎ git add, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ содСрТимоС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊ вСрсии v3 (Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ всС эти шаги Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ). Если сСйчас ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ git commit, Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ сохранСны измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ„Π°ΠΉΠ» ΠΊ вСрсии v1, Π½ΠΎ ΠΏΡ€ΠΈ этом Ρ„Π°ΠΉΠ» Π² Π Π°Π±ΠΎΡ‡Π΅ΠΌ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ возвращался ΠΊ Ρ‚Π°ΠΊΠΎΠΉ вСрсии.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git add, reset ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ --patch для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ индСксации части содСрТимого. Π’Π°ΠΊΠΈΠΌ способом Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ измСнСния.


БлияниС ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Ρ‹ΡˆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ интСрСсноС β€” слияниС ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² с сообщСниями Π²ΠΈΠ΄Π° «упс.Β», Β«Π’ Ρ€Π°Π±ΠΎΡ‚Π΅Β» ΠΈ Β«ΠΏΠΎΠ·Π°Π±Ρ‹Π» этот Ρ„Π°ΠΉΠ»Β». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ reset для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ просто ΠΈ быстро ΡΠ»ΠΈΡ‚ΡŒ ΠΈΡ… Π² ΠΎΠ΄ΠΈΠ½. (Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ ОбъСдинСниС ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π³Π»Π°Π²Ρ‹ 7 прСдставлСн Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΡ‰Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ reset.)

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ содСрТит ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ», Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ добавляСт Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ измСняСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ, Π° Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ снова измСняСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π±Ρ‹Π» сдСлан Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ.

image

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git reset --soft HEAD~2, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ HEAD Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² (Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ):

image

Π—Π°Ρ‚Π΅ΠΌ просто снова Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git commit:

image

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ваша «достиТимая» история (история, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ впослСдствии ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½Π° сСрвСр), сСйчас выглядит Ρ‚Π°ΠΊ β€” Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ с Ρ„Π°ΠΉΠ»ΠΎΠΌ file-a.txt вСрсии v1, ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ измСняСт Ρ„Π°ΠΉΠ» file-a.txt Π΄ΠΎ вСрсии v3 ΠΈ добавляСт file-b.txt. ΠšΠΎΠΌΠΌΠΈΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТал Ρ„Π°ΠΉΠ» вСрсии v2 Π½Π΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π² истории.


Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ с checkout

НаконСц, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒΡΡ вопросом, Π² Ρ‡Π΅ΠΌ ΠΆΠ΅ состоит ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ checkout ΠΈ reset. Как ΠΈ reset, ΠΊΠΎΠΌΠ°Π½Π΄Π° checkout управляСт трСмя Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ Git, ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π΅Ρ‘ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π»ΠΈ Π²Ρ‹ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π‘Π΅Π· указания ΠΏΡƒΡ‚ΠΈ Команда git checkout [branch] ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° git reset --hard [branch], Π² процСссС ΠΈΡ… выполнСния всС Ρ‚Ρ€ΠΈ Π΄Π΅Ρ€Π΅Π²Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ [branch]. Но ΠΌΠ΅ΠΆΠ΄Ρƒ этими ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… отличия.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ reset --hard, ΠΊΠΎΠΌΠ°Π½Π΄Π° checkout Π±Π΅Ρ€Π΅ΠΆΠ½ΠΎ относится ΠΊ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ, ΠΈ провСряСт, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ измСнСния. Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, эта ΠΊΠΎΠΌΠ°Π½Π΄Π° поступаСт Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΌΠ½Π΅Π΅ β€” ΠΎΠ½Π° пытаСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² Π Π°Π±ΠΎΡ‡Π΅ΠΌ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ простыС слияния Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π΅ измСняли, Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΊΠΎΠΌΠ°Π½Π΄Π° reset --hard просто замСняСт всё Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π½Π΅ выполняя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ.

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ HEAD. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ reset ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π²Π΅Ρ‚ΠΊΡƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ HEAD, ΠΊΠΎΠΌΠ°Π½Π΄Π° checkout ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ сам HEAD Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π» Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.

НапримСр, ΠΏΡƒΡΡ‚ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ master ΠΈ develop, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΈ ΠΌΡ‹ сСйчас находимся Π½Π° Π²Π΅Ρ‚ΠΊΠ΅ develop (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π΅Ρ‘). Если ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ git reset master, сама Π²Π΅Ρ‚ΠΊΠ° develop станСт ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΈ master. Если ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ git checkout master, Ρ‚ΠΎ develop Π½Π΅ измСнится, Π½ΠΎ измСнится HEAD. Он станСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° master.

Π˜Ρ‚Π°ΠΊ, Π² ΠΎΠ±ΠΎΠΈΡ… случаях ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ HEAD Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ A, Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ это Π΄Π΅Π»Π°Π΅ΠΌ. Команда reset пСрСмСстит Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π²Π΅Ρ‚ΠΊΡƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ HEAD, Π° checkout ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сам HEAD.

image


Π‘ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΡƒΡ‚ΠΈ

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ checkout состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Ρ„Π°ΠΉΠ»Π°. Π’ этом случаС, ΠΊΠ°ΠΊ ΠΈ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ reset, HEAD Π½Π΅ пСрСмСщаСтся. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠ°ΠΊ ΠΈ git reset [branch] file обновляСт Ρ„Π°ΠΉΠ» Π² индСксС вСрсиСй ΠΈΠ· ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ½Π° обновляСт ΠΈ Ρ„Π°ΠΉΠ» Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π’ΠΎ ΠΆΠ΅ самоС сдСлала Π±Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π° git reset --hard [branch] file (Ссли Π±Ρ‹ reset ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚Π°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ) β€” это нСбСзопасно для Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ HEAD.

Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ git reset ΠΈ git add, ΠΊΠΎΠΌΠ°Π½Π΄Π° checkout ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΡŽ --patch для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π²Π°ΠΌ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ измСнСния содСрТимого Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ частям.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° памятка Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π². Π’ столбцС HEAD указываСтся REF Ссли эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ссылку (Π²Π΅Ρ‚ΠΊΡƒ), Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ HEAD ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΈ HEAD Ссли пСрСмСщаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сам HEAD. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° столбСц Β«Π‘ΠΎΡ…Ρ€Π°Π½Π½ΠΎΡΡ‚ΡŒ РК» β€” Ссли Π² Π½Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΎ NO, Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π½ΡŒΠΊΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

image


ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ΅ слияниС

Ѐилософия Git Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΌΠ½Ρ‹ΠΌ, ΠΊΠΎΠ³Π΄Π° слияниС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ, Π½ΠΎ Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚, ΠΎΠ½ Π½Π΅ пытаСтся ΡΡƒΠΌΠ½ΠΈΡ‡Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Π³ΠΎ автоматичСски.

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

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


ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ слияния

Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρƒ нас Π΅ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… дСйствий. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΊΠ°ΠΊ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· этой ситуации. Если Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ Π±Ρ‹Π»ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ ΠΈ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ с Π½ΠΈΠΌΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ слияния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git merge --abort

$ git status -sb
  ## master
  UU hello.rb
  
$ git merge --abort

$ git status -sb
  ## master

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° пытаСтся ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ вашС состояниС Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ запуска слияния. Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаях, Ссли ΠΏΠ΅Ρ€Π΅Π΄ запуском слияния Ρƒ вас Π±Ρ‹Π»ΠΈ Π½Π΅ припрятанныС ΠΈΠ»ΠΈ Π½Π΅ зафиксированныС измСнСния Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π²ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях всё Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Если ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ сСбя Π² уТасном состоянии ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ просто Π½Π°Ρ‡Π°Ρ‚ΡŒ всё сначала, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ git reset --hard HEAD (Π»ΠΈΠ±ΠΎ вмСсто HEAD ΡƒΠΊΠ°Π·Π°Π² Ρ‚ΠΎ, ΠΊΡƒΠ΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒΡΡ). Но ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ это ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ всС измСнСния Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, поэтому ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.

Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ связаны с ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ это, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ситуациях это Ρ‚Π°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ каТдая строка Π² Π½Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π° ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° снова. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Git считаСт всС эти строки ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹ΠΌΠΈ ΠΈ поэтому Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹. Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ слияния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ настройки игнорирования ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов. Если Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ мноТСство ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² слияния Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ слияниС ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ снова, Π½ΠΎ Π½Π° этот Ρ€Π°Π· с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -Xignore-all-space ΠΈΠ»ΠΈ -Xignore-space-change. ΠŸΠ΅Ρ€Π²Π°Ρ опция ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ измСнСния Π² любом количСствС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов, вторая ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ всС измСнСния ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов.

$ git merge -Xignore-space-change whitespace
  Auto-merging hello.rb
  Merge made by the 'recursive' strategy.
   hello.rb | 2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ измСнСния Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‚, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов всё ΡΠΎΠ»ΡŒΡ‘Ρ‚ΡΡ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Тизнь, Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π² вашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π»ΡŽΠ±ΠΈΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π°ΠΌΠΈ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ всС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π½Π° табуляции ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.


Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΏΡ€ΠΈ слиянии

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ инструмСнт ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² слияния β€” это ΠΊΠΎΠΌΠ°Π½Π΄Π° git log. Она ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ привСсти ΠΊ возникновСнию ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ². Π’Ρ€Π΅ΠΌΠ΅Π½Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π² Π΄Π²ΡƒΡ… Π²Π΅Ρ‚ΠΊΠ°Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ измСнялась ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°.

Для получСния ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ списка всСх ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ сдСланы Π² любой ΠΈΠ· сливаСмых Π²Π΅Ρ‚ΠΎΠΊ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис Β«Ρ‚Ρ€Ρ‘Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ Π² Π’Ρ€ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ.

 $ git log --oneline --left-right HEAD...MERGE_HEAD
  < f1270f7 Update README
  < 9af9d3b Create README
  < 694971d Update phrase to 'hola world'
  > e3eb223 Add more tests
  > 7cff591 Create initial testing script
  > c3ffff1 Change text to 'hello mundo'

Π­Ρ‚ΠΎ список всСх ΡˆΠ΅ΡΡ‚ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Ρ… Π² слияниС, с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Ρ‚ΠΊΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².

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

$ git log --oneline --left-right --merge
  < 694971d Update phrase to 'hola world'
  > c3ffff1 Change text to 'hello mundo'

Если Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -p, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ список ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ„Π°ΠΉΠ»Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²ΠΎΠ·Π½ΠΈΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ для быстрого получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, которая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΠ΅Ρ‚ ΠΈ ΠΊΠ°ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ это Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ.


ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Π’Π°ΠΊ ΠΊΠ°ΠΊ Git добавляСт Π² индСкс всС ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ слияния, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ git diff Π² состоянии ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° слияния Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сСйчас ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΠ΅Ρ‚. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ смоТСтС ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ Π΅Ρ‰Ρ‘ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ.

Если Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git diff сразу послС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° слияния, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² довольно своСобразном Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.

$ git diff
  diff --cc hello.rb
  index 0399cd5,59727f0..0000000
  --- a/hello.rb
  +++ b/hello.rb
  @@@ -1,7 -1,7 +1,11 @@@
    #! /usr/bin/env ruby
    def hello
  ++<<<<<<< HEAD
   +  puts 'hola world'
  ++=======
  +   puts 'hello mundo'
  ++>>>>>>> mundo
end hello()

Π’Π°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ называСтся Β«ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΒ» (Combined Diff), для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ различия Π² Π½Π΅ΠΌ содСрТится Π΄Π²Π° Ρ€Π°Π·Π΄Π΅Π»Π° с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ различия строки (Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΎΠ½Π° ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π°) ΠΌΠ΅ΠΆΠ΄Ρƒ «вашСй» Π²Π΅Ρ‚ΠΊΠΎΠΉ ΠΈ содСрТимым вашСго Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ содСрТится Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Β«ΠΈΡ…Β» Π²Π΅Ρ‚ΠΊΠΎΠΉ ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ.

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

Если ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΈ снова Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git diff, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚Ρƒ ΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½ΠΎ Π² Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΌ прСдставлСнии.

$ vim hello.rb
$ git diff
  diff --cc hello.rb
  index 0399cd5,59727f0..0000000
  --- a/hello.rb
  +++ b/hello.rb
  @@@ -1,7 -1,7 +1,7 @@@
    #! /usr/bin/env ruby
    def hello
  -   puts 'hola world'
   -  puts 'hello mundo'
  ++  puts 'hola mundo'
end hello()

Π’ этом Π²Ρ‹Π²ΠΎΠ΄Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ строка hola world ΠΏΡ€ΠΈ слиянии присутствовала Π² «нашСй» Π²Π΅Ρ‚ΠΊΠ΅, Π½ΠΎ отсутствовала Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ, строка hello mundo Π±Ρ‹Π»Π° Π² Β«ΠΈΡ…Β» Π²Π΅Ρ‚ΠΊΠ΅, Π½ΠΎ Π½Π΅ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, hola mundo Π½Π΅ Π±Ρ‹Π»Π° Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· сливаСмых Π²Π΅Ρ‚ΠΎΠΊ, Π½ΠΎ сСйчас присутствуСт Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ. Π­Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°.

Π’Π°ΠΊΡƒΡŽ ΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ послС выполнСния слияния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git log, ΡƒΠ·Π½Π°Π² Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠ°ΠΊ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚. Git Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Ссли Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ git show для ΠΊΠΎΠΌΠΌΠΈΡ‚Π° слияния ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git log -p с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ --cc (Π±Π΅Π· Π½Π΅Ρ‘ данная ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ измСнСния для ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² слияния).

$ git log --cc -p -1
  commit 14f41939956d80b9e17bb8721354c33f8d5b5a79
  Merge: f1270f7 e3eb223
  Author: Scott Chacon <[email protected]>
  Date:   Fri Sep 19 18:14:49 2014 +0200
      Merge branch 'mundo'
      Conflicts:
          hello.rb
  diff --cc hello.rb
  index 0399cd5,59727f0..e1d0799
  --- a/hello.rb
  +++ b/hello.rb
  @@@ -1,7 -1,7 +1,7 @@@
    #! /usr/bin/env ruby
    def hello
  -   puts 'hola world'
   -  puts 'hello mundo'
  ++  puts 'hola mundo'
end hello()

ΠžΡ‚ΠΌΠ΅Π½Π° слияний

ΠšΠΎΠΌΠΌΠΈΡ‚ слияния Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Допустим, Π²Ρ‹ Π½Π°Ρ‡Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² тСматичСской Π²Π΅Ρ‚ΠΊΠ΅, случайно слили Π΅Π΅ Π² master, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ваша история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

image

Π•ΡΡ‚ΡŒ Π΄Π²Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ.

Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ссылок

Если Π½Π΅ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ слияния сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² вашСм локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Ρ‚ΠΎ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΈ Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ состоит Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Π²Π΅Ρ‚ΠΎΠΊ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ Ρ‚ΡƒΠ΄Π° ΠΊΡƒΠ΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, Ссли Π²Ρ‹ послС случайного git merge Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git reset --hard HEAD~, Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π²Π΅Ρ‚ΠΎΠΊ восстановятся Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

image

Π—Π΄Π΅ΡΡŒ нСбольшоС Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅: reset --hard ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выполняСт Ρ‚Ρ€ΠΈ шага:

  1. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π²Π΅Ρ‚ΠΊΡƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ HEAD. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ master Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ ΠΎΠ½Π° Π±Ρ‹Π»Π° Π΄ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° слияния (C6).
  2. ΠŸΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ индСкс ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΆΠ΅ Π²ΠΈΠ΄Ρƒ Ρ‡Ρ‚ΠΎ ΠΈ HEAD.
  3. ΠŸΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΆΠ΅ Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΈ индСкс.

НСдостаток этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° состоит Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ истории, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Π² случаС совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ рСпозитория. ЗаглянитС Π² ΠžΠΏΠ°ΡΠ½ΠΎΡΡ‚ΠΈ пСрСмСщСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ; ΠΊΡ€Π°Ρ‚ΠΊΠΎ говоря, Ссли Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… людСй ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΈΠ· измСняСмых Π²Π°ΠΌΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ использования reset. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли послС слияния ΡƒΠΆΠ΅ Π±Ρ‹Π» сдСлан хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚; ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ссылки фактичСски ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ этих ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.


ΠžΡ‚ΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Π°

Если ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Git прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС измСнСния, сдСланныС Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Git Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ «восстановлСниСм» (Β«revertΒ»), Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Ρ‘ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  $ git revert -m 1 HEAD
  [master b1d8379] Revert "Merge branch 'topic'"

ΠžΠΏΡ†ΠΈΡ -m 1 ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ являСтся «основной Π²Π΅Ρ‚ΠΊΠΎΠΉΒ» ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ сохранСн. Когда Π²Ρ‹ выполняСтС слияниС Π² HEAD (git merge topic), Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²ΡƒΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… HEAD (C6), Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Π²Π΅Ρ€ΡˆΠΈΠ½Π° Π²Π΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ (C4). Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС измСнСния, внСсённыС слияниСм родитСля #2 (C4), ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ этом всё содСрТимоС ΠΈΠ· родитСля #1 (C6).

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ с ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ восстановлСния (ΠΎΡ‚ΠΌΠ΅Π½ΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° слияния) выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

image

Новый ΠΊΠΎΠΌΠΌΠΈΡ‚ ^M ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ содСрТимоС ΠΊΠ°ΠΊ C6, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, начиная с Π½Π΅Π΅ всё выглядит Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ слияниС Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ, Π·Π° Ρ‚Π΅ΠΌ лишь ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Β«Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ Π½Π΅ слитыС» ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ всё Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² истории HEAD. Git ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ Π² Π·Π°ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ, Ссли Π²Ρ‹ вновь ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠ»ΠΈΡ‚ΡŒ topic Π² Π²Π΅Ρ‚ΠΊΡƒ master:

$ git merge topic
  Already up-to-date.

Π’ Π²Π΅Ρ‚ΠΊΠ΅ topic Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Ρ‘ нСдоступно ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ master. ΠŸΠ»ΠΎΡ…ΠΎ, Ρ‡Ρ‚ΠΎ Π² случаС добавлСния Π½ΠΎΠ²Ρ‹Ρ… Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π² topic, ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΈ слияния Git Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ сдСланы послС ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ слияния:

image

Π›ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ являСтся ΠΎΡ‚ΠΊΠ°Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ слияния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ внСсти измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° слияния:

$ git revert ^M
  [master 09f0126] Revert "Revert "Merge branch 'topic'""
$ git merge topic

image

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, M ΠΈ ^M ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹. Π’ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ ^^M, фактичСски, ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ измСнСния ΠΈΠ· C3 ΠΈ C4, Π° Π² C8 β€” измСнСния ΠΈΠ· C7, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Π΅Ρ‚ΠΊΠ° topic ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ слита.


Rerere

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ git rerere β€” частично скрытый ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Git. Π•Ρ‘ имя являСтся сокращСниСм для Β«reuse recorded resolutionΒ» (Β«ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сохранённоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Β»). Как слСдуСт ΠΈΠ· названия, эта Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ позволяСт ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Git Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² случаС возникновСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°, Git смоТСт Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ автоматичСски.


Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

Помимо рассмотрСнных Ρ€Π°Π½Π΅Π΅ основных способов ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Git ΠΏΠΎ сСти (HTTP, SSH ΠΈ Ρ‚.ΠΏ.), сущСствуСт Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вСсьма ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ.

Git ΡƒΠΌΠ΅Π΅Ρ‚ Β«ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΒ» свои Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ». Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ситуациях. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ваша ΡΠ΅Ρ‚ΡŒ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ измСнСния своим ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ ΠΈΠ·Π²Π½Π΅ офиса ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ доступа ΠΊ локальной сСти ΠΏΠΎ сообраТСниям бСзопасности. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ваша ΠΊΠ°Ρ€Ρ‚Π° бСспроводной/ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΎΠΉ связи просто сломалась. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρƒ вас Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅Ρ‚ доступа ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ сСрвСру, Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅ обновлСния, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ 40 ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ format-patch Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.

Π’ этих случаях Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π° git bundle. Она ΡƒΠΏΠ°ΠΊΡƒΠ΅Ρ‚ всё, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ситуации Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ ΠΏΠΎ сСти ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git push, Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½Π° Ρ„Π»Π΅ΡˆΠΊΡƒ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с двумя ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ:

$ git log
  commit 9a466c572fe88b195efd356c3f2bbeccdb504102
  Author: Scott Chacon <[email protected]>
  Date:   Wed Mar 10 07:34:10 2010 -0800
      Second commit
  commit b1ec3248f39900d2a406049d762aa68e9641be25
  Author: Scott Chacon <[email protected]>
  Date:   Wed Mar 10 07:34:01 2010 -0800
First commit

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ этот Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ доступа Π½Π° запись ΠΊ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ рСпозитория ΠΈΠ»ΠΈ просто Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git bundle create.

$ git bundle create repo.bundle HEAD master
  Counting objects: 6, done.
  Delta compression using up to 2 threads.
  Compressing objects: 100% (2/2), done.
  Writing objects: 100% (6/6), 441 bytes, done.
  Total 6 (delta 0), reused 0 (delta 0)

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ» repo.bundle, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТатся всС Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для воссоздания Π²Π΅Ρ‚ΠΊΠΈ master рСпозитория. КомандС bundle Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ список ΠΈΠ»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΠ°ΠΊΠ΅Ρ‚. Если Π²Ρ‹ Π½Π°ΠΌΠ΅Ρ€Π΅Π²Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Ρ‘, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² этот список HEAD, ΠΊΠ°ΠΊ это сдСлали ΠΌΡ‹. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» repo.bundle ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅ ΠΈΠ»ΠΈ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° USB-диск, Ρ‚Π΅ΠΌ самым Π»Π΅Π³ΠΊΠΎ Ρ€Π΅ΡˆΠΈΠ² ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, допустим, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ» repo.bundle ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ этим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠ· Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ это ΠΏΡ€ΠΈ использовании URL.

$ git clone repo.bundle repo
  Cloning into 'repo'...
  ...
$ cd repo
$ git log --oneline
  9a466c5 Second commit
  b1ec324 First commit

Если ΠΏΡ€ΠΈ создании ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π²Ρ‹ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π² спискС ссылок HEAD, Ρ‚ΠΎ ΠΏΡ€ΠΈ распаковкС Π²Π°ΠΌ потрСбуСтся ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ -b master ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΡƒΡŽ Π² ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΈΠ½Π°Ρ‡Π΅ Git Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Π½Π° ΠΊΠ°ΠΊΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Π΅ΠΌΡƒ слСдуСт ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ сдСлали Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π½Π° USB-Ρ„Π»Π΅ΡˆΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅.

$ git log --oneline
  71b84da Last commit - second repo
  c99cf5b Fourth commit - second repo
  7011d3d Third commit - second repo
  9a466c5 Second commit
  b1ec324 First commit

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΏΠ°ΠΊΠ΅Ρ‚. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ сСтСвых ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сами Π²Ρ‹ΡΡΠ½ΡΡŽΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠΎ сСти, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это сами Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ вСсь Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ измСнСния β€” Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, сдСланныС локально.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠΌΠ°Π½Π΄Π° git bundle ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ»ΠΈ для выполнСния сСтСвых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π½Π΅Ρ‚ доступа ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ сСти ΠΈΠ»ΠΈ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ.


Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Если для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌ сСрвСрам Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» SSH, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ вмСсто пароля, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ бСзопасно ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· Π²Π²ΠΎΠ΄Π° Π»ΠΎΠ³ΠΈΠ½Π° ΠΈ пароля. Однако, это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ использовании HTTP-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² β€” ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€Ρ‹ Π»ΠΎΠ³ΠΈΠ½, ΠΏΠ°Ρ€ΠΎΠ»ΡŒ. Всё Π΅Ρ‰Ρ‘ слоТнСС для систСм с Π΄Π²ΡƒΡ…Ρ„Π°ΠΊΡ‚ΠΎΡ€Π½ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π² качСствС пароля, гСнСрируСтся случайно ΠΈ Π΅Π³ΠΎ слоТно воспроизвСсти.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π² Git Π΅ΡΡ‚ΡŒ систСма управлСния ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² этом. Π’ Git Β«ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈΒ» Π΅ΡΡ‚ΡŒ нСсколько ΠΎΠΏΡ†ΠΈΠΉ:

β€’ По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Git Π½Π΅ ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ совсСм. КаТдоС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Ρƒ вас Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ.

β€’ Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ cache ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² памяти Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Ни ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ сохраняСтся Π½Π° диск ΠΈ всС ΠΎΠ½ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΈΠ· кСша Ρ‡Π΅Ρ€Π΅Π· 15 ΠΌΠΈΠ½ΡƒΡ‚.

β€’ Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ store ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ врСмя Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ Π½Π° дискС. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΊ Git-сСрвСру, Π²Π°ΠΌ Π½Π΅ потрСбуСтся большС Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ваши ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. НСдостатком Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ваш ΠΏΠ°Ρ€ΠΎΠ»ΡŒ хранится Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ Π² вашСм домашнСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

β€’ На случай Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Mac, Π² Git Π΅ΡΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ osxkeychain, ΠΏΡ€ΠΈ использовании ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, привязанному ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ систСмному Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρƒ. Π’ этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° диск Π½Π° Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ врСмя, Π½ΠΎ ΠΎΠ½ΠΈ ΡˆΠΈΡ„Ρ€ΡƒΡŽΡ‚ΡΡ с использованиСм Ρ‚ΠΎΠΉ ΠΆΠ΅ систСмы, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ HTTPS-сСртификаты ΠΈ автозаполнСния для Safari.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² настройки Git:

$ git config --global credential.helper cache

К оглавлСнию

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Git

Π’ Π³Π»Π°Π²Π΅ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Git, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git config. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π΅Π»Π°Π»ΠΈ, это установили своё имя ΠΈ e-mail адрСс:

$ git config --global user.name "John Doe"
$ git config --global user.email [email protected]

БСйчас Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с нСсколькими Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсными опциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для настройки повСдСния Git.

ΠšΡ€Π°Ρ‚ΠΊΠΎ: Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² для измСнСния стандартного повСдСния, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π’Π½Π°Ρ‡Π°Π»Π΅, Git ΠΈΡ‰Π΅Ρ‚ настройки Π² Ρ„Π°ΠΉΠ»Π΅ /etc/gitconfig, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит настройки для всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² систСмС ΠΈ всСх Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π². Если ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ --system ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git config, Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния ΠΈ записи Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ с этим Ρ„Π°ΠΉΠ»ΠΎΠΌ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ мСсто, ΠΊΡƒΠ΄Π° смотрит Git β€” это Ρ„Π°ΠΉΠ» ~/.gitconfig (ΠΈΠ»ΠΈ ~/.config/git/config), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ настройки ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Git Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π½Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ†ΠΈΡŽ --global.

НаконСц, Git ΠΈΡ‰Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ настроСк Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Git (.git/config) Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ рСпозитория. Π­Ρ‚ΠΈ значСния относятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ доступны ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --local ΠΊΠΎΠΌΠ°Π½Π΄Π΅ git config. (Если ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ настроСк Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ явно, Ρ‚ΠΎ подразумСваСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ.)

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ (систСмный, Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ) пСрСопрСдСляСт значСния ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ уровня, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, значСния ΠΈΠ· .git/config Π²Π°ΠΆΠ½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· /etc/gitconfig.

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


Базовая конфигурация ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Git Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π° Π΄Π²Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: настройки ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ настройки сСрвСра. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ β€” клиСнтскиС, для настройки Π²Π°ΡˆΠΈΡ… Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ Π² Ρ€Π°Π±ΠΎΡ‚Π΅.

Для просмотра ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ списка настроСк, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… вашСй вСрсиСй Git, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ man git-config

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ список доступных настроСк с довольно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ описаниСм. Π’Π°ΠΊ ΠΆΠ΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь https://git-scm.com/docs/git-config.html.

core.editor По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Git ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ваш Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ($VISUAL ΠΈΠ»ΠΈ $EDITOR), Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ β€” ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ использованию Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° vi ΠΏΡ€ΠΈ создании ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ сообщСний ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈΠ»ΠΈ Ρ‚Π΅Π³ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ настройкой core.editor:

$ git config --global core.editor emacs

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ являСтся основным для вашСго окруТСния, Git Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Emacs для рСдактирования сообщСний.

commit.template Если ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ использован ΠΊΠ°ΠΊ сообщСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ создании ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Бмысл создания шаблона сообщСния ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ лишний Ρ€Π°Π· Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ сСбС (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ) ΠΎ трСбованиях ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ ΠΈΠ»ΠΈ ΡΡ‚ΠΈΠ»ΡŽ оформлСния сообщСния ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. НапримСр, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρ‡Ρ‚ΠΎ Π²Ρ‹ создали Ρ„Π°ΠΉΠ» ~/.gitmessage.txt, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выглядит Ρ‚Π°ΠΊ:

Subject line (try to keep under 50 characters)
Multi-line description of commit,
feel free to be detailed.
[Ticket: X]

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ шаблон Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅Ρ€Ρƒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ строка Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° сообщСния Π±Ρ‹Π»Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ (для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ однострочного Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git log -- oneline), Ρ‡Ρ‚ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² сообщСнии слСдуСт Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π½ΠΈΠΆΠ΅, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ссылку Π½Π° Π½ΠΎΠΌΠ΅Ρ€ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ»ΠΈ сообщСния Π² систСмС отслСТивания ошибок.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Git ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ содСрТимоС этого Ρ„Π°ΠΉΠ»Π° Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git commit, слСдуСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° commit.template:

$ git config --global commit.template ~/.gitmessage.txt
$ git commit

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΡ€ΠΈ создании ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π² вашСм Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ сообщСниС ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°:

  Subject line (try to keep under 50 characters)
  Multi-line description of commit,
  feel free to be detailed.
  [Ticket: X]
  # Please enter the commit message for your changes. Lines starting
  # with '#' will be ignored, and an empty message aborts the commit.
  # On branch master
  # Changes to be committed:
  #   (use "git reset HEAD <file>..." to unstage)
  #
  # modified:   lib/test.rb
  #
  ~
  ~
  ".git/COMMIT_EDITMSG" 14L, 297C

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

core.excludesfile Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π³Π»Π°Π²Ρ‹ 2 сказано, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Ρ„Π°ΠΉΠ»Π΅ .gitignore вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Git Π½Π΅ отслСТивал ΠΈΡ… ΠΈ Π½Π΅ добавлял Π² индСкс ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git add.

Однако, ΠΈΠ½ΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π²ΠΎ всСх Π²Π°ΡˆΠΈΡ… рСпозиториях. Если Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Mac OS X, вСроятно Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ .DS_Store. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Emacs ΠΈΠ»ΠΈ Vim, Ρ‚ΠΎ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° ~ ΠΈΠ»ΠΈ .swp.

Данная настройка позволяСт Π²Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ глобального Ρ„Π°ΠΉΠ»Π° .gitignore. Если Π²Ρ‹ создадитС Ρ„Π°ΠΉΠ» ~/.gitignore_global с содСрТаниСм:

  *~
  .*.swp
  .DS_Store

... ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git config --global core.excludesfile ~/.gitignore_global, Ρ‚ΠΎ Git большС Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π²ΠΎΠΆΠΈΡ‚ вас Π½Π° счёт этих Ρ„Π°ΠΉΠ»ΠΎΠ².


Экспорт рСпозитория

Атрибуты Git Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ интСрСсныС Π²Π΅Ρ‰ΠΈ ΠΏΡ€ΠΈ экспортС вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. export-ignore

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Git ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΏΡ€ΠΈ создании Π°Ρ€Ρ…ΠΈΠ²Π°. Если Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹, Π½ΠΎ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈΡ… Π² Π°Ρ€Ρ…ΠΈΠ² ΠΏΡ€ΠΈ экспортС, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΈΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ export-ignore.

НапримСр, Ρƒ вас Π΅ΡΡ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ test/ ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅Ρ‚ смысла Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈΡ… Π² Π°Ρ€Ρ…ΠΈΠ² вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ этом случаС достаточно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку Π² Ρ„Π°ΠΉΠ» .gitattributes:

  test/ export-ignore

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΡ€ΠΈ создании Π°Ρ€Ρ…ΠΈΠ²Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git archive, ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ test/ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Π°Ρ€Ρ…ΠΈΠ².


Π₯ΡƒΠΊΠΈ Π² Git

Как ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ систСмы контроля вСрсий, Git прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ запуска ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… скриптов Π² случаС возникновСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… событий. Π’Π°ΠΊΠΈΠ΅ дСйствия Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ…ΡƒΠΊΠ°ΠΌΠΈ ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π° Π΄Π²Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹: сСрвСрныС ΠΈ клиСнтскиС. Если Ρ…ΡƒΠΊΠΈ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌΠΈ опСрациями ΠΊΠ°ΠΊ слияниС ΠΈΠ»ΠΈ созданиС ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Ρ‚ΠΎ Π½Π° сторонС сСрвСра ΠΎΠ½ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΡŽΡ‚ΡΡ сСтСвыми опСрациями, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π₯ΡƒΠΊΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ ΠΊΡ€ΡƒΠ³Π° Π·Π°Π΄Π°Ρ‡.

Установка Ρ…ΡƒΠΊΠ°

Π₯ΡƒΠΊΠΈ хранятся Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ hooks ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ основного ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Git. Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² это .git/hooks. Когда Π²Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git init, Git наполняСт ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ hooks ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ скриптов, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ использованию, ΠΏΡ€ΠΈ этом ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… содСрТит Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ прСдставлСны Π² Π²ΠΈΠ΄Π΅ шСлл скриптов, содСрТащими ΠΊΠΎΠ΄ Π½Π° Perl, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой язык для написания скриптов β€” Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹. Если Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· прСдустановлСнных скриптов, Ρ‚ΠΎ достаточно Π΅Π³ΠΎ просто ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ, ΡƒΠ±Ρ€Π°Π² суффикс .sample.

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ собствСнного скрипта достаточно Π·Π°Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ имя, ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ hooks основного ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Git ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ исполняСмым. Π”Π°Π»Π΅Π΅, ΠΌΡ‹ рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ…ΡƒΠΊΠΈ.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠ΅ Π₯ΡƒΠΊΠΈ

Для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° сущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ…ΡƒΠΊΠΎΠ². Π’ этой Π³Π»Π°Π²Π΅ ΠΎΠ½ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° Ρ…ΡƒΠΊΠΈ уровня ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, уровня e-mail ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅. НСобходимо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ клиСнтскиС Ρ…ΡƒΠΊΠΈ НЕ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ рСпозитория. Если Π²Ρ‹ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ скрипты для обСспСчСния соблюдСния ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, Ρ‚ΠΎ Π²Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСрвСрныС Ρ…ΡƒΠΊΠΈ.

Π₯ΡƒΠΊΠΈ Π½Π° сСрвСрС

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Ρ…ΡƒΠΊΠ°ΠΌ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠ°ΠΊ систСмный администратор Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π²Π°ΠΆΠ½Ρ‹Ρ… Ρ…ΡƒΠΊΠΎΠ² Π½Π° сСрвСрС для вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚Π΅ΠΌ самым обСспСчив Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ практичСски любой ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ. Π­Ρ‚ΠΈ скрипты Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄ΠΎ ΠΈ послС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π½Π° сСрвСр. Pre-Ρ…ΡƒΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ сообщСниС ΠΎΠ± ошибкС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ; Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ сколь ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ.


К оглавлСнию

ГрафичСскиС интСрфСйсы

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всё, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ графичСского интСрфСйса, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΈ ΠΈΠ· консоли; командная строка ΠΏΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ являСтся мСстом, Π³Π΄Π΅ Ρƒ вас большС всСго возмоТностСй ΠΈ контроля Π½Π°Π΄ вашими рСпозиториями.

Установив Git, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π΄Π²Π° графичСских инструмСнта: gitk ΠΈ git-gui.

gitk β€” это графичСский просмотрщик истории. Π§Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ° ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹Ρ… git log ΠΈ git grep. Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для поиска событий ΠΈΠ»ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ истории. ΠŸΡ€ΠΎΡ‰Π΅ всСго Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Gitk ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки: ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ ΠΈ Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅:

$ gitk [git log options]

Gitk ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ git log. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ полСзная опция β€” --all, которая ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Gitk Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, доступныС ΠΈΠ· любой ссылки, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ HEAD

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π²Ρ‹Π²ΠΎΠ΄ git log --graph; каТдая Ρ‚ΠΎΡ‡ΠΊΠ° соотвСтствуСт ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ, Π»ΠΈΠ½ΠΈΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ родство ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², Π° ссылки ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ Ρ†Π²Π΅Ρ‚Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌΠΈ. Жёлтая Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ HEAD, Π° красная β€” измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π’ Π½ΠΈΠΆΠ½Π΅ΠΉ части располоТСны элСмСнты интСрфСйса для просмотра Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°: слСва ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ измСнСния ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Π° справа β€” общая информация ΠΏΠΎ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ. Π’ Ρ†Π΅Π½Ρ‚Ρ€Π΅ располоТСны элСмСнты для поиска ΠΏΠΎ истории.

git-gui, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ gitk β€” это инструмСнт рСдактирования ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π•Π³ΠΎ Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ просто Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΠ· консоли:

$ git gui

Π”Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты

БущСствуСт ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… графичСских инструмСнтов для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Git, начиная ΠΎΡ‚ спСциализированных, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ, заканчивая Β«ΠΊΠΎΠΌΠ±Π°ΠΉΠ½Π°ΠΌΠΈΒ» ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ всю Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Git. На ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС Git поддСрТиваСтся Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии список Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярных ΠΎΠ±ΠΎΠ»ΠΎΡ‡Π΅ΠΊ: https://git-scm.com/downloads/guis. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ список доступСн Π½Π° Git Π²ΠΈΠΊΠΈ: https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Graphical_Interfaces.


Git Π² Bash

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Bash, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π΅Π³ΠΎ Ρ„ΠΈΡˆΠ΅ΠΊ для облСгчСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Git. К слову, Git поставляСтся с ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… ΠΎΠ±ΠΎΠ»ΠΎΡ‡Π΅ΠΊ, Π½ΠΎ ΠΎΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Для Π½Π°Ρ‡Π°Π»Π°, скачайтС Ρ„Π°ΠΉΠ» contrib/completion/git-completion.bash ΠΈΠ· рСпозитория с исходным ΠΊΠΎΠ΄ΠΎΠΌ Git. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² ΡƒΠΊΡ€ΠΎΠΌΠ½ΠΎΠ΅ мСсто β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ваш домашний ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ β€” ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки Π² .bashrc:

. ~/git-completion.bash

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅ с этим, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ ΠΈ Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅:

$ git chec<tab>

...ΠΈ Bash Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ строку Π΄ΠΎ git checkout. Π­Ρ‚Π° магия Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для всСх Git ΠΊΠΎΠΌΠ°Π½Π΄, ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² ΠΈ ΠΈΠΌΡ‘Π½ ссылок Ρ‚Π°ΠΌ, Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ пригодится ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, располоТСнном Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сколь ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно названия Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΈ статуса Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ½Π°Π±Π΄ΠΈΡ‚ΡŒ строку привСтствия этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, скачайтС Ρ„Π°ΠΉΠ» contrib/completion/git-prompt.sh ΠΈΠ· рСпозитория с исходным ΠΊΠΎΠ΄ΠΎΠΌ Git ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ строки Π² .bashrc:

   . ~/git-prompt.sh
  export GIT_PS1_SHOWDIRTYSTATE=1
  export PS1='\w$(__git_ps1 " (%s)")\$ '

Π§Π°ΡΡ‚ΡŒ \w ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, \$ β€” ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ $ ΠΈΠ»ΠΈ #), Π° __git_ps1 " (%s)" Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΡƒΡŽ Π² git-prompt.sh, с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ (%s) β€” строкой форматирования. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ваша строка привСтствия Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° эту, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘Ρ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ:

image

Оба Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… скрипта снабТСны ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ, заглянитС Π²Π½ΡƒΡ‚Ρ€ΡŒ git-completion.bash ΠΈ git-prompt.sh Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС.


Git Π² Zsh

Git поставляСтся с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ автодополнСния для Zsh. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, просто Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ строку autoload -Uz compinit && compinit Π² ваш .zshrc Ρ„Π°ΠΉΠ». Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Zsh Π±ΠΎΠ»Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‡Π΅ΠΌ Π² Bash:

$ git che<tab>
check-attr        -- display gitattributes information
check-ref-format  -- ensure that a reference name is well formed
checkout          -- checkout branch or paths to working tree
checkout-index    -- copy files from index to working directory
cherry            -- find commits not merged upstream
cherry-pick       -- apply changes introduced by some existing commits

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ автодополнСния Π½Π΅ просто пСрСчислСны; ΠΎΠ½ΠΈ снабТСны ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ описаниями ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΠ· ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ…, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡΡΡŒ ΠΏΠΎ Π½ΠΈΠΌ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ клавиши Tab. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΊΠΎΠΌΠ°Π½Π΄ Git, Π½ΠΎ ΠΈ для ΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ рСпозитория (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ссылки ΠΈ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ), Π° Ρ‚Π°ΠΊΠΆΠ΅ для ΠΈΠΌΡ‘Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ.

Π’ состав Zsh Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ vcs_info, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для извлСчСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· систСм контроля вСрсий. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² ΠΏΡ€Π°Π²ΠΎΠΉ строкС привСтствия, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки Π² Ρ„Π°ΠΉΠ» ~/.zshrc:

  autoload -Uz vcs_info
  precmd_vcs_info() { vcs_info }
  precmd_functions+=( precmd_vcs_info )
  setopt prompt_subst
  RPROMPT=\$vcs_info_msg_0_
  # PROMPT=\$vcs_info_msg_0_'%# '
  zstyle ':vcs_info:git:*' formats '%b'

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² ΠΏΡ€Π°Π²ΠΎΠΉ части ΠΎΠΊΠ½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘Ρ‚Π΅ Π²Π½ΡƒΡ‚Ρ€ΡŒ Git рСпозитория. (Для отобраТСния названия Π²Π΅Ρ‚ΠΊΠΈ слСва ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ PROMPT вмСсто RPROMPT)

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ vcs_info ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ zshcontrib(1) ΠΈΠ»ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Ρ‘Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ поставляСмый вмСстС с Git скрипт настройки git-prompt.sh; Π΄Π΅Ρ‚Π°Π»ΠΈ использования ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² коммСнтариях ΠΊ Ρ„Π°ΠΉΠ»Ρƒ https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh. Π‘ΠΊΡ€ΠΈΠΏΡ‚ git-prompt.sh совмСстим с ΠΎΠ±Π΅ΠΈΠΌΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Bash ΠΈ Zsh.

Zsh Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ†Π΅Π»Ρ‹Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ, посвящённыС Π΅Π³ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ oh-my-zsh, располоТСн Π½Π° https://github.com/robbyrussell/oh-my-zsh. БистСма ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΌΠΎΡ‰Π½Π΅ΠΉΡˆΠΈΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» автодополнСния для Git, Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Β«Ρ‚Π΅ΠΌΡ‹Β» (слуТащиС для настройки строк привСтствия) ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… систСм контроля вСрсий. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π΅ΠΌΡ‹ oh-my-zsh β€” лишь ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² примСнСния.

image

About

My notes for the ProGit book

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published