Commit в программировании что это

Раскладываем Git по полочкам: терминология

Что это за зверь?

Git — распределённая система управления версиями. Git поддерживает быстрое разделение и слияние версий, включает инструменты для визуализации и навигации по нелинейной истории разработки.

Ничего не понятно, давай еще раз

Какие такие версии?

Версия — это состояние файла (или нескольких файлов) в какой-то конкретный момент времени. Например, пустой файл (1), тот же файл с каким-то текстом (2) и этот же файл, в котором была исправлена опечатка (3) — три разные версии одного файла, которые были получены последовательной модификацией (изменением) файла.

Системы чего.

Система управления версиями — программа, позволяющая сохранять состояние файлов (те самые версии), возвращаться к ранее сохраненному состоянию, сохранять последовательность изменений внесенных в файлы, отменять или заново применять эти изменения, отслеживать авторство изменений.

Что там с этими версиями делают?

Разделение версий — независимые изменения одного файла.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что этоВерсионность на примере текстового файла

Например, у нас есть файл с каким-то текстом (версия этого файла). Файл отправляется на проверку, там обнаруживается и исправляется опечатка (получаем новую версию файла). Независимо от этого в старый (неисправленный) файл дописывается еще что-то (получаем еще одну версию этого файла). Т.е., на данный момент у нас есть два разных файла (две версии одного файла), которые были независимо друг от друга созданы на основе одной общей версии.

Слияние версий — объединение двух и более независимых версий. Для примера выше, слиянием будет объединение двух существующих версий нашего файла в одну — файл, в котором будет и новый текст, и исправленная опечатка.

А при чем тут история?

История разработки — совокупность всех версий файлов, над которыми ведется работа. Историей разработки в данном случае будет список изменений:

добавление изначального текста

добавление нового текста

объединение двух версий файла (при выполнении слияния)

Нелинейная история — история, в которой изменения вносятся не одно за другим последовательно, а может быть внесено несколько независимых изменений на основе одной версии файла (исправление опечатки и добавление нового текста). Т.е. мы создаем две параллельные истории изменений файла.

Немного терминологии

Репозиторий (repository) — совокупность файлов, состояние которых отслеживается, и история их изменений. По факту, репозиторий — это проект, над которым ведется работа, и все изменения в этом проекте. Для отслеживания состояния файла его необходимо добавить в репозиторий.

Коммит (commit) — сохраненное состояние (версия) файлов репозитория.

Ветка (branch) — последовательность коммитов (история изменения состояния репозитория). Каждый коммит в ветке имеет «родителя» (parent commit) — коммит, на основе которого был получен текущий. В репозитории может быть несколько веток (в случаях, когда к одной версии репозитория применяется несколько независимых изменений).

HEAD — указатель на текущий коммит (указатель на состояние, в котором репозиторий находится на данный момент).

Мастер (master, main) — основная ветка репозитория, создается автоматически при создании репозитория.

Мердж (слияние, merge) — объединение двух или более веток. В процессе мерджа изменения с указанной ветки переносятся (копируются) в текущую.

Целевая ветка мерджа — ветка, изменения с которой объединяются с текущей веткой.

База слияния (merge base) — последний общий коммит двух веток.

Мердж коммит (merge commit) — коммит, который создается автоматически по завершению процесса слияния веток. Мердж коммит содержит в себе все изменения целевой ветки мерджа, которые отсутствуют в текущей (все коммиты целевой ветки, которые начиная с базы слияния, но не включая её).

Слияние перемоткой (fast-forward merge) — слияние веток, при котором в текущей ветке отсутствуют новые коммиты (последний коммит текущей ветки является базой слияния). При таком мердже текущая ветка просто переходит в состояние целевой ветки (указатель HEAD переносится на последний коммит целевой ветки). Мердж коммит при этом не создается.

Слияние без перемотки (non fast-forward merge) — слияние, при котором новые коммиты (относительно базы слияния) присутствуют как в текущей, так и в целевой ветках.

В пустом репозитории, в основной ветке, создаем пустой файл, добавляем в репозиторий (теперь git будет отслеживать состояние файла) и коммитим (коммит А).

Добавляем в файл текст, коммитим еще раз (коммит B).

Создаем новую ветку (как бы копируя состояние репозитория), вносим изменения в файл и снова коммитим (коммит С).

Возвращаемся на предыдущую ветку (теперь репозиторий находится в состоянии, которое сохранилось при коммите B, без изменений, которые вносились в новой ветке).

Вносим новые изменения, создаем новый коммит (D).

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что этоИстория изменений при создании новой ветки

После этого новая ветка останется в состоянии С (со своими собственными изменениями), а в основной ветке будут изменения из обеих веток (изменения, внесенные коммитами С и D). Эта ветка перейдет в состояние Е.
Возможна и обратная ситуация, когда изменения из основной ветки вливаются в новую (мердж производится из новой ветки).

При этом мы можем вернуться в новую ветку и продолжить работу в ней (внести новые изменения и создать коммит F).

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что этоИстория изменений после слияния и нового коммита

Мердж конфликт (merge conflict) — ситуация, когда при слиянии веток в один или несколько файлов вносились независимые изменения. В некоторых случаях (например, если изменялись разные, не пересекающиеся части одного файла) git способен самостоятельно решить, как выполнять слияние таких файлов. Если автоматически это сделать не удалось — возникает конфликт. В таком случае необходимо самостоятельно указать, как выполнять слияние конфликтующих версий (решить конфликт, resolve merge conflict). Изменения, внесенные в процессе решения конфликта автоматически попадают в мердж коммит.

Чекаут (checkout) — переход на другое (существующее) состояние репозитория (на другой коммит или ветку). При этом все файлы в репозитории возвращаются в состояние, в котором они находились на момент указанного коммита. Если перед переходом в репозиторий были внесены изменения, которые были добавлены в репозиторий, но не попали в коммит — они будут перенесены «поверх» состояния после перехода. Как и при мердже, git попробует применить эти изменения к новому состоянию автоматически, при неудаче — возникает конфликт и изменения необходимо применить вручную.

Дифф (diff) — разница двух состояний (коммитов, веток, подготовленных или модифицированных файлов).

Трехсторонний дифф (three-way diff) — дифф, возникающий при мердже и решении конфликтов. Является разницей трех состояний: состояния репозитория в текущей ветке, состояния в целевой ветке слияния и общего состояния между этими ветками (состояния в базе слияния).

Черри-пик (cherry-pick) — процесс добавления в текущую ветку одного (или нескольких) коммитов из другой ветки, без необходимости выполнять слияние веток.

Реверт (revert) — отмена внесенных изменений (коммита или группы коммитов). В процессе реверта создается дополнительный коммит, который так же можно отменить при необходимости (вернув репозиторий в изначальное состояние). Реверт мердж коммита позволяет отменить выполненное ранее слияние веток.

Ребейз (rebase) — перенос изменений текущей ветки «поверх» другой ветки. При этом все коммиты текущей ветки, которых нет в целевой, удаляются из текущей и заново создаются в целевой ветке (последовательно применяются к состоянию в целевой ветке). Поскольку ребейз пересоздает коммиты заново и меняет существующую историю, его использование не рекомендуется при командной разработке. Ребейз в ветке, над которой работает несколько человек, может привести к потере чужих изменений и/или невозможности корректно выполнить слияние.

В данном случае коммит Е содержит изменения, которые вносились с момента последнего слияния или создания ветки (с момента коммита В). Т.е. коммит Е содержит в себе изменения из D. При выполнении ребейза git понимает, что эти изменения (E) уже присутствуют в целевой ветке (и окажутся в текущей после ребейза), потому нет необходимости копировать коммит Е, дублируя этим D.

Командная разработка

Наличие удаленного репозитория может быть полезным и при одиночной разработке: оно позволяет синхронизировать состояние проекта на разных компьютерах и просто сохранить проект на внешнем сервере.

Есть два варианта синхронизации изменений:

пулл (pull) — слияние состояния удаленного репозитория и локального (обычно — в отдельной ветке). Пулл может выполняться как для одной и той же ветки (с одинаковым именем), так и для разных. Пулл являет собою обычный мердж, но целевая ветка при этом находится не в том же репозитории, в котором выполняется пулл, а в удаленном. Как следствие, при пулле так же создается мердж коммит, пулл можно отменить (заревертить) и в его процессе может возникнуть мердж конфликт.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

    пуш (push) — обратный пуллу процесс. При пуше изменения из локального репозитория переносятся в удаленный. Пуш обновляет состояние текущей ветки в удаленном репозитории и не является мерджем (не создает дополнительные коммиты и не может привести к конфликтам). Если в ветке удаленного репозитория присутствуют коммиты, которых нет в локальном репозитории, сигнализируется ошибка о несовпадении истории изменений (non fast-forward merge), пуш выполнить не получится. В таком случае необходимо сначала синхронизировать состояние локального репозитория (получить недостающие коммиты с помощью пулла), и только после этого повторить процесс пуша.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Нередко возникает необходимость обновить информацию о состоянии удаленного репозитория (существующих ветках и коммитах в них) без выполнения слияния (пулла). Такой процесс называется фетчем (fetch). Таким образом, пулл является комбинаций фетча и мерджа: сперва обновляется информация о состоянии целевой ветки в удаленном репозитории, а затем ее изменения вливаются в текущую ветку в локальном репозитории.

основные понятия и термины

простые примеры терминов

применение git’a при командной разработке

некоторые проблемы, которые могут возникать при использовании git’a

Источник

Гит-словарик для начинающих программистов

Мёржим бранчи и коммитим реквесты

Мы часто упоминаем Git — способ организации хранения и контроля версий файлов в рабочем проекте. Сегодня расскажем о странных словах: «бранч», «коммит», «пулл-реквест» и об остальных понятиях в гите.

О чём речь

Гит — это такой способ хранения файлов и их версий. Гит позволяет смотреть историю изменений файлов, кто какие дополнения и когда вносил, как развивался проект, кто что в него добавлял и почему.

Главная особенность гита — он помнит всё, что вы в него внесли, и может показать, какие именно строчки вы правили несколько лет назад, когда чинили ошибку авторизации, например.

На базе гита есть сервис «Гитхаб». Работает так:

Это полезно, например, когда несколько человек параллельно пилят совместный проект. Каждый работает над своим файлом или даже своим куском одного файла. Всю работу авторы синхронизируют между собой: чтобы не было ситуации, что два человека редактируют один и тот же файл, а потом затирают результаты работы друг друга, сами того не зная.

Это если вкратце. Теперь будут подробности.

Что такое репозиторий (git repository)

Гит-репозиторий — это облачное хранение вашего проекта на сервере (например, на сервере Гитхаба, но можно и на другом).

У каждого программиста может быть сколько угодно репозиториев, по одному на каждый проект. А можно вести все проекты в одном репозитории, но тогда это превратится в мешанину. Но каждый имеет право на мешанину.

В репозитории могут храниться:

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Что такое бранч (git branch)

Бранч — это ветка или копия проекта, в которую можно вносить любые изменения и они не повлияют на основной проект.

В гит-репозитории всегда есть как минимум один бранч, который называется master. Если не создавать других веток, то все изменения будут сразу идти в главную ветку проекта. Для очень маленьких или учебных проектов это терпимо, но в любом коммерческом коде поступают иначе: создают ветки.

Дело в том, что ветка master используется для выпуска новых версий проекта, которые будут доступны всем. То, что добавляется в мастер-бранч, сразу становится доступно пользователям.

Но представьте такую ситуацию: мы только что запустили сайт для заказчика и он срочно хочет добавить интерактивный раздел со скидками. Можно сделать так: править рабочие файлы проекта «по живому», чтобы сразу видеть результат. А можно сделать из мастера отдельную ветку news и работать уже в ней (и это очень похоже на форк). В этом случае мы получим полную копию проекта, в которую можно вносить любые правки и они никак не повлияют на запущенный сайт. Мы в этой ветке пилим всё, что нужно клиенту, показываем ему результат на секретном сайте, а потом объединяем её с мастером. Это называется «смёржить бранчи».

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Что такое клонирование (git clone)

Клонирование — это когда вы копируете репозиторий себе на жёсткий диск. Это нужно, чтобы начать в нём что-то менять.

Чем это отличается от простого копирования: когда вы клонируете репозиторий, вместе с файлами вашего проекта вы также тянете всю историю версий, все ветки, всю историю работы. И если кто-то дальше будет вносить изменения в проект, благодаря этим данным вы сможете тоже их получить.

А если просто скопировать нужные файлы с чужого компьютера, то никаких историй и никаких связей не сохранится. Синхронизации не будет. Просто какие-то файлы.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Что значит «смёржить» (git merge)

Смёржить (от англ. merge — объединять, совмещать) — это когда мы отправляем всё, что сделали в одной ветке, в другую. Весь новый код, исправления ошибок, дополнительные функции — всё это отправится в новую ветку. Если же мы что-то удалим в коде, то при объединении этот фрагмент тоже удалится из основной ветки.

Получается, что схема работает так:

Что такое коммит (git commit)

Программировать только в облаке неудобно — проще скачать себе на компьютер весь проект и писать код на своей машине. Но чтобы правки увидели остальные, их нужно отправить обратно в репозиторий. Это и есть коммит.

Коммитить можно и один файл, и сразу несколько. Система сама найдёт, что изменилось в каждом файле, и добавит эти изменения в проект. Но все эти правки внесутся в репозиторий за один раз, потому что при коммите обрабатываются сразу все добавленные в список файлы.

Например, вы изменили файл главной страницы index.html и добавили его в список файлов текущего коммита. Теперь его можно отправить на сервер, а можно ещё поправить сразу style.css и внести в этот же коммит. Системе всё равно, сколько файлов обрабатывать, поэтому как и что коммитить — решает программист.

Единственное требование к коммитам — указывать, что именно вы поменяли в проекте, человеческим языком. Хорошим тоном и правильным подходом считается писать, что именно вы изменили: «Добавил цвет и стили основной кнопки», «Убрали метод вызова старого API», «Сделали рефакторинг функции SetOutOfDate()». Это описание будут читать другие разработчики.

Коммитить можно хоть после правки каждой строчки — весь вопрос в том, насколько нужна такая детализация в проекте. Но иногда и изменения из одной строчки можно закоммитить, если оно действительно важное.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Что такое пуш и пулл (git push, git pull)

Чтобы отправить данные из своего проекта на сервер, используют gut push. Для этого программист указывает имя ветки, в которую хочет отправить свой код, а сервер их принимает, проверяет и добавляет к себе.

Иногда бывает так, что сервер отказывается это сделать, потому что у программиста на компьютере была неактуальная ветка. За то время, пока он писал свои правки, другие программисты сделали несколько изменений, закоммитили их у себя и отправили на сервер. Получилось, что у одних эта ветка осталась свежей и актуальной, а у других она устарела. Чтобы не принимать запросы из устаревших веток, гитхаб просит сначала обновить данные у себя на комьютере с помощью git pull.

Пулл работает просто: он скачивает с сервера актуальную версию ветки и добавляет код оттуда вам на компьютер. Иногда этот код вступает в противоречие с тем, что уже успел сделать программист, и тогда возникает конфликт — нужно принять решение, какая версия одинакового кода останется в проекте, а что нужно будет убрать.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Чем коммит отличается от пуша

Коммит — это когда вы фиксируете изменения в проекте, как бы подводите итог своей работе.

Пуш — это когда вы отправляете сделанную работу туда, где хранится копия вашего кода.

Получается, последовательность действий такая:

Что дальше

Чтобы все эти бранчи и реквесты стали понятнее, в следующий раз сделаем вот что: заведём учебный проект на Гитхабе и будем работать с ним так, как делают настоящие программисты.

Источник

GitHub: работа с ветками и коммитами

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

В предыдущих статьях мы рассказывали, что такое GitHub, как его настроить и как опубликовать свой проект. Но это лишь малая часть его инструментов. Одним из ключевых моментов для GitHub является работа с ветками — разбираемся с ними в этой статье.

Ветка (branch) — это история коммитов. Давайте сначала разберемся, что это такое.

Коммит (commit) — это информация об измененных файлах. Коммит состоит из автора коммита, измененных файлов, HEAD и времени. Для примеров мы будем использовать репозиторий и сделаем первый коммит, который отправим на сервер. Он нужен для того, чтобы разграничивать задачки. Так будет понятно, какой код в истории относится к той или иной задаче, чтобы потом мы могли быстро понять суть.

Например, у нас задача — сделать блок формы. Для этого мы сделаем нужные изменения в файле index.html & style.css, и даже через месяц сможем при помощи истории изменений просмотреть измененные куски кода именно для этого блока.

При помощи команды git log в консоли мы можем отслеживать историю коммитов в ветке.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

На самом GitHub мы можем увидеть последний коммит в файле и последний коммит в ветке. Всю историю мы можем просмотреть, кликнув по кнопке n commits, где n — количество запущенных на сервер коммитов. У нас в ветке пока что один коммит, поэтому на ссылке надпись 1 commit.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Сама история будет выглядеть как список коммитов без подробностей об изменённых файлах. Здесь давайте подробнее остановимся на том, что такое HEAD коммита. Это специальный указатель, при помощи которого вы можете гибко управлять коммитами — например, склеивать или сбрасывать до нужного момента.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Если вы кликните по сообщению в коммите, в нашем случае это add first commit, то попадёте в список всех изменённых файлов.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Теперь подробнее разберем, как создавать коммит. Для начала нам нужно будет поменять файлы или добавить новые, чтобы было что коммитить, так как коммит — это история изменений. Как правило, в коммит включают изменения по одной задаче.

В нашем примере мы изменим содержание страницы index.html и добавим стили в style.css.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Изменения, не включенные в коммит, мы можем просмотреть при помощи команды git status.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Чтобы добавить файлы в коммит, мы будем использовать git add. Здесь мы можем указать нужные нам файлы для коммита, например, index.html. Если после этого мы сделаем git status, то эти файлики подсветятся зелёным — это означает, что мы можем добавить их к коммиту.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Если мы запушим наш результат на GitHub, то увидим наш коммит.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

После того, как мы поменяли наш коммит локально, запушим его на сервер при помощи ключа force. Обычный push не сработает, так как у нас уже есть коммит на сервере — здесь будьте аккуратны, ведь вы меняете историю не только локально, но и удалённо.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Теперь поговорим про ветки (branch). Ветка — это история изменений. Сейчас у в репозитории одна ветка main, в которой хранится стабильная версия. Как правило, новые задачи делаются в новых ветках, а потом вливаются в main после ревью кода.

Посмотрим, как выглядит наша ветка с двумя коммитами в графике.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Ветки можно просматривать при помощи команды git branch.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Пробежимся git log и сравним наши ветки.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Тем не менее, если мы зайдем на GitHub, то обнаружим, что у нас там только одна ветка — main. Так происходит, потому что ветка form-index существует пока только на нашем компьютере, то есть локально.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Чтобы наша новая ветка появилась на сервере, нам нужно запушить наши изменения.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Если посмотрим на историю коммитов в form, то увидим, что она отличается от main на один коммит.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Мы можем создавать новые ветки не только из main, но и из других веток — так делают редко. Самое главное здесь понять, что если мы создали новую ветку из другой ветки, то мы наследуем историю коммитов ветки, из которой создали ветвление, но только в момент создания.

Давайте создадим ветку form-index-fix и посмотрим на историю коммитов в ней.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Теперь поэкспериментируем и посмотрим, что будет, если мы внесём изменение в ветку и забудем их закоммитить: обычный механизм через checkout не сработает, консоль попросит закоммитить изменения.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Если ветку нужно удалить на сервере, то сделать это можно при помощи интерфейса GitHub — нет рекомендаций, когда нужно удалять удалённые ветки.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Команды для консоли

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

В предыдущих статьях мы рассказывали, что такое GitHub, как его настроить и как опубликовать свой проект. Но это лишь малая часть его инструментов. Одним из ключевых моментов для GitHub является работа с ветками — разбираемся с ними в этой статье.

Ветка (branch) — это история коммитов. Давайте сначала разберемся, что это такое.

Коммит (commit) — это информация об измененных файлах. Коммит состоит из автора коммита, измененных файлов, HEAD и времени. Для примеров мы будем использовать репозиторий и сделаем первый коммит, который отправим на сервер. Он нужен для того, чтобы разграничивать задачки. Так будет понятно, какой код в истории относится к той или иной задаче, чтобы потом мы могли быстро понять суть.

Например, у нас задача — сделать блок формы. Для этого мы сделаем нужные изменения в файле index.html & style.css, и даже через месяц сможем при помощи истории изменений просмотреть измененные куски кода именно для этого блока.

При помощи команды git log в консоли мы можем отслеживать историю коммитов в ветке.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

На самом GitHub мы можем увидеть последний коммит в файле и последний коммит в ветке. Всю историю мы можем просмотреть, кликнув по кнопке n commits, где n — количество запущенных на сервер коммитов. У нас в ветке пока что один коммит, поэтому на ссылке надпись 1 commit.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Сама история будет выглядеть как список коммитов без подробностей об изменённых файлах. Здесь давайте подробнее остановимся на том, что такое HEAD коммита. Это специальный указатель, при помощи которого вы можете гибко управлять коммитами — например, склеивать или сбрасывать до нужного момента.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Если вы кликните по сообщению в коммите, в нашем случае это add first commit, то попадёте в список всех изменённых файлов.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Теперь подробнее разберем, как создавать коммит. Для начала нам нужно будет поменять файлы или добавить новые, чтобы было что коммитить, так как коммит — это история изменений. Как правило, в коммит включают изменения по одной задаче.

В нашем примере мы изменим содержание страницы index.html и добавим стили в style.css.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Изменения, не включенные в коммит, мы можем просмотреть при помощи команды git status.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Чтобы добавить файлы в коммит, мы будем использовать git add. Здесь мы можем указать нужные нам файлы для коммита, например, index.html. Если после этого мы сделаем git status, то эти файлики подсветятся зелёным — это означает, что мы можем добавить их к коммиту.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Если мы запушим наш результат на GitHub, то увидим наш коммит.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

После того, как мы поменяли наш коммит локально, запушим его на сервер при помощи ключа force. Обычный push не сработает, так как у нас уже есть коммит на сервере — здесь будьте аккуратны, ведь вы меняете историю не только локально, но и удалённо.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Теперь поговорим про ветки (branch). Ветка — это история изменений. Сейчас у в репозитории одна ветка main, в которой хранится стабильная версия. Как правило, новые задачи делаются в новых ветках, а потом вливаются в main после ревью кода.

Посмотрим, как выглядит наша ветка с двумя коммитами в графике.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Ветки можно просматривать при помощи команды git branch.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Пробежимся git log и сравним наши ветки.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Тем не менее, если мы зайдем на GitHub, то обнаружим, что у нас там только одна ветка — main. Так происходит, потому что ветка form-index существует пока только на нашем компьютере, то есть локально.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Чтобы наша новая ветка появилась на сервере, нам нужно запушить наши изменения.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Если посмотрим на историю коммитов в form, то увидим, что она отличается от main на один коммит.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Мы можем создавать новые ветки не только из main, но и из других веток — так делают редко. Самое главное здесь понять, что если мы создали новую ветку из другой ветки, то мы наследуем историю коммитов ветки, из которой создали ветвление, но только в момент создания.

Давайте создадим ветку form-index-fix и посмотрим на историю коммитов в ней.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Теперь поэкспериментируем и посмотрим, что будет, если мы внесём изменение в ветку и забудем их закоммитить: обычный механизм через checkout не сработает, консоль попросит закоммитить изменения.

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Commit в программировании что это. Смотреть фото Commit в программировании что это. Смотреть картинку Commit в программировании что это. Картинка про Commit в программировании что это. Фото Commit в программировании что это

Если ветку нужно удалить на сервере, то сделать это можно при помощи интерфейса GitHub — нет рекомендаций, когда нужно удалять удалённые ветки.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *