Skip to main content

Чи можна змінювати історію комітів?

Чому взагалі можна змінювати історію

Git - розподілена система. Історія комітів - це не щось «святе», а просто ланцюжок об'єктів, і Git дозволяє:

  • переписувати коміти
  • видаляти їх
  • об'єднувати
  • змінювати повідомлення і автора

Поки коміти не потрапили до спільного репозиторію, ти вільний робити з ними що завгодно.


Як можна змінювати історію (основні способи)

1. git commit --amend

Використовується, щоб змінити останній коміт:

  • виправити повідомлення
  • додати забутий файл
bash
git commit --amend

Це перезаписує останній коміт, створюючи новий.


2. git rebase (особливо interactive)

Найпотужніший інструмент для зміни історії.

Дозволяє:

  • змінювати повідомлення комітів
  • об'єднувати коміти (squash)
  • змінювати порядок
  • видаляти коміти
bash
git rebase -i HEAD~3

Дуже люблять на співбесідах, як ознаку впевненого знання Git.


3. git reset

Дозволяє зсунути вказівник гілки назад:

  • --soft
  • --mixed
  • --hard

Наприклад:

bash
git reset --hard HEAD~1

Може видалити коміти, якщо на них більше ніхто не посилається.


4. git revert (важлива відмінність!)

git revert не змінює історію, а додає новий коміт, який скасовує зміни старого.

Це безпечний спосіб для публічних гілок.


Головне правило (ключ для співбесіди)

Не можна переписувати історію, яка вже використовується іншими.

Формулювання, яке дуже подобається інтерв'юерам:

Історію можна безпечно змінювати тільки в локальних або ще не опублікованих гілках.


Чому це небезпечно у спільному репозиторії

Якщо ти змінив історію і зробив push --force:

  • у колег ламається історія
  • з'являються конфлікти
  • можна втратити чужу роботу

Коротка відповідь для співбесіди

Так, історію комітів у Git можна змінювати - за допомогою commit --amend, rebase, reset. Але робити це безпечно тільки для локальних або нерозшарених комітів. У публічних гілках історію не переписують, а використовують git revert.


Типова помилка кандидатів

«У Git не можна змінювати історію» «Можна завжди, якщо акуратно» Можна, але з чітким розумінням контексту і наслідків

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.