Git: отмена, история и ветки
Система контроля версий — это точка сохранения, которая никогда не забывает, зачем она была сделана. Она позволяет отменить изменение спустя недели и отвечает на вопрос, с которого начинается любая охота за багом: какое изменение это сломало?
Ты изменил одну строку. Одну. И теперь весь сайт сломан: цены неверные, кнопки ничего не делают, а ты не помнишь, как эта строка выглядела раньше. Это самый обычный момент в программировании, и у него есть правильный ответ. Это не хорошая память и не Ctrl+Z. Это система контроля версий.
Простая версия отмены — это Ctrl+Z. Она работает примерно минуту, а потом заканчивается: ты закрываешь редактор, или перезаписываешь файл, или просто идёшь дальше, и история отмен исчезает. Ещё ты наверняка делал копии. Будем честны, как они выглядят: site-final.zip, site-final-2.zip, site-final-real.zip. Копии ничего не объясняют. Система контроля версий записывает каждое изменение вместе с тем, кто его сделал, когда и что он пытался сделать. Спустя недели ты всё ещё можешь точно узнать, что было в той строке и почему её изменили.
Коммит — это снимок всего проекта, сохранённый вместе с коротким сообщением. Это не разница между версиями и не копия одного файла: это состояние всего проекта в тот момент. Каждый коммит указывает на предыдущий, поэтому коммиты образуют цепочку — именно её и называют историей проекта.
9f1c2ab
|
a17d3e0
|
64b8f21
|
(start)
$ git diff 64b8f21 a17d3e0
--- a/cart.js
+++ b/cart.js
- return net;
+ return net * (1 + VAT);Ветка — это отдельная линия истории, которая начинается от той, где ты находишься. Смысл в том, что она дешёвая: создать её — дело одного мгновения, и стоит она почти ничего, поэтому можно попробовать идею, не ставя на кон рабочий сайт. Если идея удалась, ты вливаешь ветку обратно в основную линию. Если нет — выбрасываешь ветку, и ничего из того, что работало, не изменилось. В команде это способ нескольким людям работать одновременно и не мешать друг другу: у каждого своя линия, а основная линия остаётся в состоянии, которое можно выпускать.
Конфликт слияния возникает, когда две ветки изменили одни и те же строки. Git отказывается угадывать и кладёт в файл обе версии, разделив их маркерами:
<<<<<<< HEAD
price = 19.00
=======
price = 21.00
>>>>>>> experimentПрактика
Расставь по порядку честный путь от «оно сломано» обратно к «оно починено».
Подсказки
- Нельзя отменить то, что не было записано, поэтому всё начинается с сохранения.
- Пользователи сначала получают работающий сайт; написать нормальное исправление и рассказать о нём остальным — после.
15 XP
Сопоставь каждую житейскую проблему с тем, что её действительно решает.
Подсказки
- Ветка помогает только если основная линия продолжает работать, пока ты экспериментируешь, — ради этого две линии и заводят.
- Конфликт — это информация: он говорит, что два человека тронули одну строку, и решить, какая версия верна, может только человек.
13 XP
Ты собираешься сохранить изменение. Какое сообщение коммита действительно поможет тому, кто будет читать историю через три месяца?
Подсказки
- Спроси, что нужно следующему человеку, чтобы понять это изменение, не открывая код.
- Полезное сообщение говорит, что изменилось и зачем; как это сделано, видно из самого кода.
14 XP