Переписывание истории

GitGitBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Добро пожаловать, путешествующий во времени Git-исследователь! Вам поручена важная миссия: очистить запутанную историю коммитов сверхсекретного проекта. Ваша цель - использовать ваши недавно приобретенные Git-способности, в частности, искусство интерактивного перебазирования (interactive rebasing), чтобы превратить хаотичную временную шкалу в ясную и лаконичную историю.

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

Готовы ли вы погрузиться в поток времени и выйти с отполированной Git-историей? Давайте начнем ваше временное приключение!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/log("Show Commits") git/BranchManagementGroup -.-> git/rebase("Reapply Commits") subgraph Lab Skills git/commit -.-> lab-387746{{"Переписывание истории"}} git/log -.-> lab-387746{{"Переписывание истории"}} git/rebase -.-> lab-387746{{"Переписывание истории"}} end

Очистка временной шкалы

Задачи

Репозиторий с заданием настроен в ~/project/time-travel-git. Выполните следующую команду, чтобы просмотреть начальную историю коммитов:

cd ~/project/time-travel-git
git log --oneline

Вы должны увидеть следующие 4 коммита (ваши хеши коммитов будут отличаться):

886c6ad (HEAD -> master) Add project description
3a87b84 Add project codename
6b4cbb9 Fix typo in project name
0d71e5e Start secret project

Ваша миссия включает в себя следующие задачи:

  1. Объедините два самых старых коммита ("Start secret project" и "Fix typo in project name") в один коммит с сообщением "Initialize secret project".
  2. Перефразируйте коммит "Add project codename" на "Add project codename: Chronos".
  3. Оставьте самый новый коммит ("Add project description") без изменений.

Требования

Чтобы успешно выполнить эту миссию, придерживайтесь следующих требований:

  • Все операции должны выполняться в каталоге ~/project/time-travel-git.
  • Вы должны использовать команду git rebase -i (интерактивное перебазирование) для очистки истории коммитов.
  • Ваша окончательная история должна содержать ровно 3 коммита (вместо исходных 4).
  • Содержимое файла должно оставаться неизменным - вы изменяете только историю коммитов.
  • После завершения задания, выполнение git log --oneline должно показать 3 коммита с правильными сообщениями.

Подсказки

Вот несколько полезных советов, которые помогут вам в решении задачи:

  1. Интерактивное перебазирование позволяет манипулировать коммитами в вашей истории. Основной формат команды:

    git rebase -i <commit>

    где <commit> - это коммит, предшествующий первому, который вы хотите изменить. Чтобы изменить с самого первого коммита, вы можете использовать:

    git rebase -i --root
  2. На экране интерактивного перебазирования вы увидите список коммитов с действиями. Общие действия:

    • pick - использовать коммит как есть
    • reword или r - использовать коммит, но изменить его сообщение
    • squash или s - объединить этот коммит с предыдущим
    • fixup или f - как squash, но отбросить сообщение этого коммита
  3. Чтобы объединить коммиты, вы можете использовать squash или fixup для второго коммита.

  4. Чтобы изменить сообщение коммита, используйте действие reword.

  5. После настройки плана перебазирования сохраните и закройте редактор. Git проведет вас через остальную часть процесса, открывая новые окна редактора по мере необходимости для редактирования сообщений коммитов.

  6. Если вы допустили ошибку во время перебазирования, вы всегда можете прервать его с помощью:

    git rebase --abort

    и начать заново.

Пример

После завершения задания ваш git log --oneline должен выглядеть примерно так (с другими хешами коммитов):

abc1234 Add project description
def5678 Add project codename: Chronos
ghi9101 Initialize secret project
✨ Проверить решение и практиковаться

Заключение

В этом задании вы отправились в путешествие, искажающее время, по истории Git. Вы освоили искусство интерактивного перебазирования (interactive rebasing), мощный инструмент, который позволяет вам изменить прошлое и создать более чистую и логичную историю коммитов.

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

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

Продолжая свои Git-приключения, продолжайте оттачивать эти навыки. Возможность манипулировать историей - это не просто наведение порядка, это создание четкой истории развития вашего проекта. Пусть ваши будущие Git-истории будут чистыми, ваши слияния - бесконфликтными, а ваши коммиты - всегда значимыми!