Git squash html academy

Основные команды для работы с Git

Работа с Git через терминал — это обязательная часть практики фронтендера. Однако для начинающих разработчиков этот инструмент может показаться сложным. Чтобы вам было проще учиться, мы собрали основные команды для работы с Git.

☝ В некоторых командах мы будем писать URL-адрес удалённого репозитория и название проекта в квадратных скобках, вот так — [ссылка на удалённый репозиторий] . Мы делаем это только для наглядности. Вам квадратные скобки ставить не нужно.

Первоначальная настройка Git

Работа с любой программой всегда начинается с её настройки. Git можно настроить один раз и менять что-то только по мере необходимости.

Указать имя пользователя — git config —global user.name «Ivan Ivanov» . Задаёт имя пользователя, от которого будут идти коммиты. Вместо Ivan Ivanov нужно написать свои данные на латинице. Если имя состоит из одного слова, кавычки можно не ставить.

Указать электронную почту — git config —global user.email «mail@gmail.com» . Вместо mail@gmail.com нужно указать вашу почту. Обратите внимание, она должна совпадать с той, на которую зарегистрирован аккаунт в Гитхабе.

Посмотреть настройки — git config —list . Параметры можно посмотреть и в конфигурационном файле, но этот способ быстрее.

Работа с репозиторием

Создать репозиторий — git init . Инициализирует пустой репозиторий.

Склонировать удалённый репозиторий — git clone [ссылка на удалённый репозиторий] . Проект появится в директории, где вы находились в момент клонирования.

Читайте также:  Html php переход страницы

Связать удалённый и локальный репозитории — git remote add origin [ссылка на удалённый репозиторий] .

Работа с изменениями

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

Подтянуть изменения — git pull . Подтягивает в локальный репозиторий последнюю версию проекта. Будьте внимательны, вызов этой команды сотрёт все незафиксированные изменения. Иногда после ввода этой команды появляется конфликт.

Посмотреть статус файлов — git status . Вы увидите, какие файлы изменили, удалили или добавили в проект. При этом статус «Закоммичен» не отобразится.

Добавить файлы в индекс — git add [название файла] . После ввода этой команды вы можете сделать коммит.

Есть похожие команды, например, git add . индексирует сразу все изменённые файлы и папки в директории, где вы находитесь. Обратите внимание, между точкой и словом add нужно ставить пробел. Команда git add :/ добавляет в индекс все файлы независимо от того, в какой директории вы находитесь.

Сделать коммит — git commit -m «Комментарий к коммиту» — фиксирует изменения. До выполнения этой команды локальные изменения никуда не запишутся.

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

Посмотреть историю коммитов — git log . Выводит список всех коммитов. У этой команды есть разные опции, самая используемая из них — —oneline . Она показывает хеш в укороченном формате, ветку, в которой сделан коммит, а также текст коммита. Чтобы использовать эту опцию (как и любую другую), нужно добавить её после команды: git log—oneline .

Запушить изменения — git push . Отправляет все зафиксированные изменения с локального репозитория в удалённый. Это одна из самых важных команд, ведь все вышеописанные действия производятся в локальной копии репозитория. Когда вы закончите работу, эту копию нужно будет отправить в удалённый репозиторий. Только так другие участники процесса смогут получить актуальную версию.

Работа с ветками

Работая с Git, приходится постоянно создавать и перемещаться по веткам. А иногда ветки нужно удалять или сливать.

☝ Здесь мы для примера используем branch-name. Вам при вводе команды нужно указать название вашей ветки.

Создать ветку — git switch —create branch-name . Добавляет новую ветку с названием branch-name и автоматически переключает на неё.

Переключить ветку — git switch branch-name . Вы перейдёте на уже созданную ветку branch-name .

Для создания и переключения веток также можно использовать git checkout . Эта команда появилась раньше, у неё есть множество дополнительных функций. Например, она может восстанавливать изменения в коммите. Как раз из-за такого разнообразия задач разработчики решили создать отдельную команду для переключения между ветками — git switch . Вы можете использовать любую из команд, однако git switch доступна только в версиях от 2.23.

Посмотреть все локальные ветки — git branch .

Переименовать ветку — git branch -m [старое-название-ветки] [новое-название-ветки] — переименовывает ветку. Названия нужно писать на латинице.

Отправить ветку — git push origin [branch-name] — отправляет ветку в удалённый репозиторий.

Удалить ветки — git branch —delete [branch-name] . Команда удаляет ветку [branch-name] в локальном репозитории. Если нужно избавиться от ветки в удалённом репозитории, используйте git push —delete origin [branch-name] .

Влить ветки — git merge [branch-name] . Вливает ветку branch-name в ветку, в которой вы находитесь.

Перебазировать коммиты — git rebase [branch-name] . Перебазирует коммиты из ветки, в которой вы находитесь, в ветку [branch-name] .

Создать точную копию коммитов — git cherry-pick . Команду часто совмещают с git merge и git rebase , чтобы сохранить линейную историю коммитов. То есть создаётся точная копия коммитов, выполняется перебазирование и слияние веток.

Откладывание и удаление

Отложить изменения — git stash push . Откладывает изменения, чтобы вы, например, могли срочно перейти к другой задаче. Чтобы отложить только часть изменений, используйте git stash —patch .

Вернуть отложенные изменения — git stash pop .

Отменить изменения, не добавленные в индекс — git restore [название файла] . Удалит изменения в одном файле. Чтобы удалить изменения во всех файлах, используйте git restore :/ .

Отменить изменения, добавленные в индекс — git reset —hard . Возвращает изменения из индекса и полностью их отменяет.

Удалить коммит — git revert [195dfb0] . Вместо [195dfb0] указывается хеш коммита, его можно узнать с помощью команды git log .

Отменить слияние с конфликтом — git merge —abort . Используется, когда нет времени решать конфликт прямо здесь и сейчас.

Удалить лишнее — git clean . Команда «наводит чистоту» — удаляет неотслеживаемые файлы из рабочего каталога.

Больше информации о работе с Git и практические навыки вы получите на курсе о Git и GitHub.

Больше статей о Git

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Источник

Как склеить коммиты и зачем это нужно

Когда вы открываете пулреквест и ваш код смотрят и комментируют другие, бывает нужно что-то исправить. Обычно такие изменения мы комментируем сообщением вроде «Увеличил шрифт на 2px » или «Поменял оттенок фона в шапке». Такие маленькие изменения интересны, только пока они в пулреквесте. Ревьювер (человек, который смотрит ваш код), может легко узнать, что и когда вы изменили, а не читать весь diff заново, а вы можете легко откатить коммит, если он не нужен. Но когда приходит время вливать пулреквест, эти маленькие коммиты теряют свою ценность. Поэтому лучше их склеить в один.

Как подготовиться

Для некоторых операций из этой статьи Git будет открывать текстовый редактор. Во многих системах по умолчанию это Vim. Не самый дружелюбный для новичков. Чтобы вам было комфортно, установите в качестве Git-редактора ваш любимый редактор. Это делается с помощью команды:

git config --global core.editor 

Например, если у вас Mac OS и вы хотите установить Atom в качестве редактора по умолчанию, введите:

git config --global core.editor "atom --wait" 

А если у вас Windows и вы хотите установить Notepad++ в качестве Git-редактора, ваша команда будет такой:

git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin" 

Вам нужно просто узнать команду для запуска вашего редактора и подставить её. Вот список команд для популярных редакторов.

Как склеивать коммиты

Сначала узнаем, сколько коммитов нужно склеить. Эта команда покажет, какие коммиты у вас прибавились по сравнению с веткой master :

git cherry -v master | wc -l 

git cherry -v master

Отлично, у нас пять коммитов. Теперь перепишем историю с момента HEAD~5 , то есть с того, что было пять коммитов назад. Для этого делаем:

Флаг -i — значит в интерактивном режиме. Открывается файл:

Тут список коммитов и большой комментарий о том, что можно сделать. Из списка команд видно, что мы можем использовать squash или fixup для склейки коммитов. Первый пригодится, когда нужно изменить коммит-месседж, а второй — когда хотите использовать коммит-месседж первого.

Итак, чтобы склеить все коммиты, делаем так:

То есть говорим «используй первый коммит, а остальные приклей к нему». Потом сохраняем файл и закрываем его. Git склеивает коммиты и предлагает ввести коммит-месседж (показывает коммит-месседжи всех склеенных коммитов):

Оставляем только последний:

Сохраняем файл и смотрим лог:

Ура, остался один коммит с нужным сообщением.

Теперь нужно работу отправить на ваш Git-сервер. Обычно это делается с помощью git push , но сейчас это не удастся:

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

⭐ Используйте —force только тогда, когда вы уверены в своих действиях.

Как автоматизировать ребейз

Обычно всё-таки нужно оставить коммит-месседж первого изменения, типа «Сверстал то-то», остальные коммиты — просто правки к нему. Число правок иногда доходит до 15 — это не очень удобно, ведь нужно писать везде squash . Можно сделать так, чтобы коммиты автоматически присквошивались к нужному, для этого нужно их правильно коммитить. Предположим, мы поменяли файл и захотели закоммитить изменения как правку по ревью:

Сначала нужно узнать хеш коммита, к которому этот коммит является правкой. Воспользуемся уже знакомым cherry :

git cherry -v master

Вот наш хеш. А теперь следующий коммит обозначим правкой к этому:

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

git commit --fixup

Изменения закоммитились с сообщением fixup! Сообщение того коммита . История теперь выглядит nак:

git log

Добавим ещё несколько правок таким образом. Посмотрим изменения:

git cherry -v master

Отлично. А теперь склеим все эти коммиты. Только не вручную. Git сделает это за нас:

git rebase -i --autosquash HEAD~4 

И Git сам подставит слово fixup там, где нужно:

git rebase -i --autosquash

Просто сохраняем, и Git склеивает коммиты и использует коммит-месседж первого:

Результат автосквоша

Материалы по теме

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Источник

Оцените статью