HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Обилие команд и возможностей могут повергнуть в ужас любого, кто только начинает изучать Git. Git - это комбайн с невероятным количеством фич. Но надо ли знать их все? И как их запомнить? Как вообще научиться эффективно его использовать? В этом уроке мы ответим на эти вопросы.</p>
1 <p>Обилие команд и возможностей могут повергнуть в ужас любого, кто только начинает изучать Git. Git - это комбайн с невероятным количеством фич. Но надо ли знать их все? И как их запомнить? Как вообще научиться эффективно его использовать? В этом уроке мы ответим на эти вопросы.</p>
2 <p>Правда состоит в том, что почти никто не знает Git до конца. Разработчики регулярно открывают внутри него что-то новое, а еще постоянно гуглят его команды или смотрят документацию. Единственный способ изучить Git - постоянно использовать его. Причем наибольший эффект достигается при работе с Git в команде. Одиночная разработка в этом смысле сильно уступает, так как не затрагивает многих сложных ситуаций, возникающих только при совместной работе над одним и тем же кодом.</p>
2 <p>Правда состоит в том, что почти никто не знает Git до конца. Разработчики регулярно открывают внутри него что-то новое, а еще постоянно гуглят его команды или смотрят документацию. Единственный способ изучить Git - постоянно использовать его. Причем наибольший эффект достигается при работе с Git в команде. Одиночная разработка в этом смысле сильно уступает, так как не затрагивает многих сложных ситуаций, возникающих только при совместной работе над одним и тем же кодом.</p>
3 <p>С другой стороны, чтобы освоить Git, нужно понять, как он устроен и на каких идеях базируется. После этого вы осознаете, что подавляющее большинство команд - это всего лишь обертки над очень простой концепцией.</p>
3 <p>С другой стороны, чтобы освоить Git, нужно понять, как он устроен и на каких идеях базируется. После этого вы осознаете, что подавляющее большинство команд - это всего лишь обертки над очень простой концепцией.</p>
4 <p>Для начала давайте выведем коммиты нашего проекта<em>hexlet-git</em>в специальном виде, который активируется опцией --graph:</p>
4 <p>Для начала давайте выведем коммиты нашего проекта<em>hexlet-git</em>в специальном виде, который активируется опцией --graph:</p>
5 <p>Обратите внимание на полоску слева. Она отражает связи между коммитами. Каждый новый коммит базируется на коде предыдущего коммита. С точки зрения информатики коммиты выстраиваются в так называемый<strong>односвязный список</strong>. В таком списке каждый элемент ссылается на предыдущий. Последний элемент при этом называется<strong>головой списка</strong>(<em>head</em>по-английски).</p>
5 <p>Обратите внимание на полоску слева. Она отражает связи между коммитами. Каждый новый коммит базируется на коде предыдущего коммита. С точки зрения информатики коммиты выстраиваются в так называемый<strong>односвязный список</strong>. В таком списке каждый элемент ссылается на предыдущий. Последний элемент при этом называется<strong>головой списка</strong>(<em>head</em>по-английски).</p>
6 <p>В Git элементы списка - это сами коммиты. Как и в односвязном списке, новый коммит - это элемент, который имеет ссылку на предыдущий коммит. Предыдущий коммит ссылается на свой предыдущий, и так далее до первого коммита, который никуда не ссылается.</p>
6 <p>В Git элементы списка - это сами коммиты. Как и в односвязном списке, новый коммит - это элемент, который имеет ссылку на предыдущий коммит. Предыдущий коммит ссылается на свой предыдущий, и так далее до первого коммита, который никуда не ссылается.</p>
7 <p>Понятие "голова списка" (HEAD) в Git присутствует явно и активно используется для разных операций. Например, удаление последнего коммита выглядит так:</p>
7 <p>Понятие "голова списка" (HEAD) в Git присутствует явно и активно используется для разных операций. Например, удаление последнего коммита выглядит так:</p>
8 <p>Сам список коммитов тоже имеет название. Вы его уже видели - это<em>main</em>. В терминологии Git такой список называется<strong>веткой</strong>(<em>branch</em>). Именно поэтому команда для показа текущего местоположения в истории называется git branch:</p>
8 <p>Сам список коммитов тоже имеет название. Вы его уже видели - это<em>main</em>. В терминологии Git такой список называется<strong>веткой</strong>(<em>branch</em>). Именно поэтому команда для показа текущего местоположения в истории называется git branch:</p>
9 <p>Строго говоря, ветка в Git - это просто подвижный указатель на один из коммитов. При каждом новом коммите указатель сдвигается вперед автоматически.</p>
9 <p>Строго говоря, ветка в Git - это просто подвижный указатель на один из коммитов. При каждом новом коммите указатель сдвигается вперед автоматически.</p>
10 <p>Основная работа Git - формировать односвязный список из коммитов. Подавляющее большинство команд Git - это всего лишь небольшие программы, которые умеют ходить по этому списку и извлекать нужную информацию. Фактически все сводится к тому, что мы блуждаем по этому списку, меняем его и добавляем новые коммиты.</p>
10 <p>Основная работа Git - формировать односвязный список из коммитов. Подавляющее большинство команд Git - это всего лишь небольшие программы, которые умеют ходить по этому списку и извлекать нужную информацию. Фактически все сводится к тому, что мы блуждаем по этому списку, меняем его и добавляем новые коммиты.</p>
11 <h2>Ветки</h2>
11 <h2>Ветки</h2>
12 <p>Если смотреть дальше, то мы увидим, что цепочка коммитов в Git это не просто односвязный список. Это<strong>направленный ациклический граф</strong>- множество односвязных списков, переплетенных вместе.</p>
12 <p>Если смотреть дальше, то мы увидим, что цепочка коммитов в Git это не просто односвязный список. Это<strong>направленный ациклический граф</strong>- множество односвязных списков, переплетенных вместе.</p>
13 <p>Представьте себе, что в один момент два разных человека должны делать какие-то длинные задачи, требующие нескольких дней разработки или даже больше. В таком случае main-ветка должна оставаться рабочей: коммитить промежуточные изменения в нее нельзя, так как изменения могут сломать код. Но коммитить все равно надо, потому что просто небезопасно копить изменения в рабочей директории, не отправляя их в Git. Что делать в такой ситуации?</p>
13 <p>Представьте себе, что в один момент два разных человека должны делать какие-то длинные задачи, требующие нескольких дней разработки или даже больше. В таком случае main-ветка должна оставаться рабочей: коммитить промежуточные изменения в нее нельзя, так как изменения могут сломать код. Но коммитить все равно надо, потому что просто небезопасно копить изменения в рабочей директории, не отправляя их в Git. Что делать в такой ситуации?</p>
14 <p>Git позволяет отпочковаться от основного списка - сформировать ветку. То есть создается отдельный список коммитов, который идет мимо главной ветки. В конце разработки все коммиты из такой ветки вливаются обратно в main-ветку:</p>
14 <p>Git позволяет отпочковаться от основного списка - сформировать ветку. То есть создается отдельный список коммитов, который идет мимо главной ветки. В конце разработки все коммиты из такой ветки вливаются обратно в main-ветку:</p>
15 <p>Ветки в Git - большая история, которая достойна отдельного курса. Здесь мы про них рассказываем только потому, что невозможно работать с Git и не слышать про них.</p>
15 <p>Ветки в Git - большая история, которая достойна отдельного курса. Здесь мы про них рассказываем только потому, что невозможно работать с Git и не слышать про них.</p>