Менял ли коммиты в Git?

Ответ

Да, регулярно. Изменение истории коммитов — стандартная практика для поддержания ее чистоты и понятности перед тем, как отправить изменения в общий репозиторий.

  • Исправление последнего коммита (git commit --amend): Использую, чтобы добавить забытый файл или исправить сообщение коммита прямо перед пушем.
    # Добавил пропущенный файл и перезаписал коммит
    git add forgotten_feature.cpp
    git commit --amend -m "feat: add new parsing algorithm"
  • Перебазирование (git rebase -i): Привожу в порядок серию локальных коммитов: объединяю (squash) несколько мелких коммитов в один логичный, переписываю сообщения (reword) или меняю порядок. Это делает историю более читаемой.
    git rebase -i HEAD~5  # Интерактивно редактирую последние 5 коммитов
    # В редакторе можно выбрать 'squash', 'reword', 'edit'
  • Изменение уже отправленных коммитов: Этого следует избегать в общей ветке (например, main/master), так как это переписывает историю для всех. Однако в рамках своей feature-ветки перед созданием пулл-реквеста я всегда делаю rebase на актуальную main и привожу свои коммиты в порядок, чтобы ревьюверам было легче их читать.

Золотое правило: Изменять можно только ту историю, которую еще не видели другие (т.е. локальные или лежащие в вашей личной ветке коммиты).

Ответ 18+ 🔞

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

  • Исправляю последний коммит (git commit --amend): Использую, когда в последний момент вспоминаю, что забыл файлик добавить, или сообщение коммита написано так, что самому стыдно. Чисто чтобы не позориться.

    # Добавил пропущенный файл и перезаписал коммит
    git add forgotten_feature.cpp
    git commit --amend -m "feat: add new parsing algorithm"

    Просто, быстро, и в истории не остаётся следов твоей криворукости. Удобно, ёпта.

  • Перебазирование (git rebase -i): Вот это уже серьёзный инструмент, когда накодил кучу мелких коммитов типа «исправил опечатку», «ещё одну опечатку», «ой, всё». Беру и привожу это безобразие в божеский вид: склеиваю их в один нормальный, переписываю сообщения, чтобы было понятно. История сразу читается, как хорошая книга, а не как бред сумасшедшего.

    git rebase -i HEAD~5  # Интерактивно редактирую последние 5 коммитов
    # В редакторе можно выбрать 'squash', 'reword', 'edit'

    Сначала страшновато, но потом привыкаешь — красота же.

  • Изменение уже отправленного: А вот это, чувак, делать не надо в общей ветке типа main. Это как на общей кухне переставить всем посуду в шкафу — народ охуеет и придёт тебя линчевать. Но! В своей собственной feature-ветке, перед тем как слать пулл-реквест, — святое дело. Сделал rebase на свежую main, причесал свои коммиты, чтобы ревьюверы не плакали, глядя на этот пиздец. Уважение к коллегам, всё такое.

Главное правило, которое надо выжечь в мозгу: Менять можно только ту историю, которую ещё никто не видел. Свои локальные костыли — пожалуйста. Как только ты залил это на общий сервер и другие на это посмотрели — всё, пиши пропало. Дальше только вперёд, новые коммиты. Иначе будет вам хиросима, а не работа в команде.