HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Git - система, в которой не нужно бояться совершать ошибки. Можно сказать, что ошибки - это единственный способ научиться им пользоваться. В Git практически всегда есть способ восстановить или изменить любые коммиты. На крайний случай спасет повторный git clone.</p>
1 <p>Git - система, в которой не нужно бояться совершать ошибки. Можно сказать, что ошибки - это единственный способ научиться им пользоваться. В Git практически всегда есть способ восстановить или изменить любые коммиты. На крайний случай спасет повторный git clone.</p>
2 <p>Что делать, если коммит уже сделан, но он нас по каким-то причинам не устраивает? Ситуаций может быть много, и все они возникают регулярно даже у профессиональных разработчиков:</p>
2 <p>Что делать, если коммит уже сделан, но он нас по каким-то причинам не устраивает? Ситуаций может быть много, и все они возникают регулярно даже у профессиональных разработчиков:</p>
3 <ul><li>Забыли добавить в коммит нужные файлы</li>
3 <ul><li>Забыли добавить в коммит нужные файлы</li>
4 <li>Изменения нужно "откатить", чтобы доработать</li>
4 <li>Изменения нужно "откатить", чтобы доработать</li>
5 <li>Изменения больше не актуальны, и их нужно удалить</li>
5 <li>Изменения больше не актуальны, и их нужно удалить</li>
6 <li>Изменения были сделаны по ошибке, и их нужно отменить</li>
6 <li>Изменения были сделаны по ошибке, и их нужно отменить</li>
7 </ul><p>По большей части Git движется "только вперед". Правильный подход при работе с ним - это создавать новое, а не изменять старое.</p>
7 </ul><p>По большей части Git движется "только вперед". Правильный подход при работе с ним - это создавать новое, а не изменять старое.</p>
8 <p>Все ситуации, описанные выше, можно решить новым коммитом, изменяющим код в нужном направлении. Это не только удобно, но и безопасно. Изменение истории коммитов - опасная операция, которая чревата проблемами при синхронизации с удаленными репозиториями. Об этом мы поговорим позже.</p>
8 <p>Все ситуации, описанные выше, можно решить новым коммитом, изменяющим код в нужном направлении. Это не только удобно, но и безопасно. Изменение истории коммитов - опасная операция, которая чревата проблемами при синхронизации с удаленными репозиториями. Об этом мы поговорим позже.</p>
9 <p>Несмотря на сказанное выше, внутри Git существуют специальные команды, позволяющие упростить отмену, либо изменение коммита. С их помощью можно сделать историю коммитов понятной, а сам процесс отката - быстрым. Эти команды мы изучим в этом уроке.</p>
9 <p>Несмотря на сказанное выше, внутри Git существуют специальные команды, позволяющие упростить отмену, либо изменение коммита. С их помощью можно сделать историю коммитов понятной, а сам процесс отката - быстрым. Эти команды мы изучим в этом уроке.</p>
10 <h2>Git revert</h2>
10 <h2>Git revert</h2>
11 <p>Самая простая ситуация - отмена изменений. Фактически она сводится к созданию еще одного коммита, который выполняет изменения, противоположные тому коммиту, который отменяется:</p>
11 <p>Самая простая ситуация - отмена изменений. Фактически она сводится к созданию еще одного коммита, который выполняет изменения, противоположные тому коммиту, который отменяется:</p>
12 <p>Руками создавать подобный коммит довольно сложно, поэтому в Git добавили команду, автоматизирующую откат. Эта команда называется git revert:</p>
12 <p>Руками создавать подобный коммит довольно сложно, поэтому в Git добавили команду, автоматизирующую откат. Эта команда называется git revert:</p>
13 <p>Команда revert может отменять не только последний коммит, но и любой другой коммит из истории проекта. Согласитесь, это очень круто. Без системы контроля версий о таком нельзя было и мечтать.</p>
13 <p>Команда revert может отменять не только последний коммит, но и любой другой коммит из истории проекта. Согласитесь, это очень круто. Без системы контроля версий о таком нельзя было и мечтать.</p>
14 - <h2>Команда git reset</h2>
14 + <h2>Git reset</h2>
15 <p>Представьте, что вам нужно удалить только что сделанный по ошибке коммит. Конечно, и в этом случае подходит git revert, но так история становится менее читаемой. Если этот коммит был сделан только сейчас и еще не отправлялся на GitHub, то лучше сделать так, как будто бы этого коммита не существовало в принципе.</p>
15 <p>Представьте, что вам нужно удалить только что сделанный по ошибке коммит. Конечно, и в этом случае подходит git revert, но так история становится менее читаемой. Если этот коммит был сделан только сейчас и еще не отправлялся на GitHub, то лучше сделать так, как будто бы этого коммита не существовало в принципе.</p>
16 <p>Git позволяет удалять коммиты. Это опасная операция, которую нужно делать только в том случае, если речь идет про новые коммиты, которых нет ни у кого, кроме вас.</p>
16 <p>Git позволяет удалять коммиты. Это опасная операция, которую нужно делать только в том случае, если речь идет про новые коммиты, которых нет ни у кого, кроме вас.</p>
17 <p>Если коммит был отправлен во внешний репозиторий, например, на GitHub, то менять историю ни в коем случае нельзя. Это сломает работу у тех, кто работает с вами над проектом.</p>
17 <p>Если коммит был отправлен во внешний репозиторий, например, на GitHub, то менять историю ни в коем случае нельзя. Это сломает работу у тех, кто работает с вами над проектом.</p>
18 <p>Для удаления коммита используется команда git reset:</p>
18 <p>Для удаления коммита используется команда git reset:</p>
19 <p>У команды git reset есть множество различных флагов и способов работы. С ее помощью можно удалять коммиты, отменять их без удаления, восстанавливать файлы из истории и так далее. Работа с ней относится к продвинутому использованию Git, но здесь мы затрагиваем только самую базу.</p>
19 <p>У команды git reset есть множество различных флагов и способов работы. С ее помощью можно удалять коммиты, отменять их без удаления, восстанавливать файлы из истории и так далее. Работа с ней относится к продвинутому использованию Git, но здесь мы затрагиваем только самую базу.</p>
20 <p>Флаг --hard означает полное удаление. Без него git reset отменит коммит, но не удалит его, а поместит все изменения этого коммита в рабочую директорию, так что с ними можно будет продолжить работать.</p>
20 <p>Флаг --hard означает полное удаление. Без него git reset отменит коммит, но не удалит его, а поместит все изменения этого коммита в рабочую директорию, так что с ними можно будет продолжить работать.</p>
21 <p>Флаг HEAD~ означает "один коммит от последнего коммита". Обратите внимание, что здесь используется знак ~ - тильда. Его легко перепутать с дефисом -. Если бы мы хотели удалить два последних коммита, то могли бы написать HEAD~2:</p>
21 <p>Флаг HEAD~ означает "один коммит от последнего коммита". Обратите внимание, что здесь используется знак ~ - тильда. Его легко перепутать с дефисом -. Если бы мы хотели удалить два последних коммита, то могли бы написать HEAD~2:</p>
22 <p>HEAD (переводится как "голова") - так обозначается последний сделанный коммит. Подробнее эту терминологию мы разберем в уроке, посвященном внутреннему устройству Git.</p>
22 <p>HEAD (переводится как "голова") - так обозначается последний сделанный коммит. Подробнее эту терминологию мы разберем в уроке, посвященном внутреннему устройству Git.</p>
23 <p>Без --hard команда git reset по умолчанию работает в режиме --mixed, при котором изменения остаются в рабочей директории, но исключаются из индекса (unstage). Затем их можно исправить или отменить и выполнить новый коммит:</p>
23 <p>Без --hard команда git reset по умолчанию работает в режиме --mixed, при котором изменения остаются в рабочей директории, но исключаются из индекса (unstage). Затем их можно исправить или отменить и выполнить новый коммит:</p>
24 <p>Опция --soft позволяет сохранить изменения в индексе:</p>
24 <p>Опция --soft позволяет сохранить изменения в индексе:</p>
25 <p>Команда git reset --soft отменяет коммит, но оставляет изменения в индексе (staging area). Следующий коммит включит в себя те же изменения, если их не модифицировать.</p>
25 <p>Команда git reset --soft отменяет коммит, но оставляет изменения в индексе (staging area). Следующий коммит включит в себя те же изменения, если их не модифицировать.</p>
26 <p>Последнего коммита больше не существует. При этом сделанные в нем изменения не пропали. Они находятся в рабочей директории для дальнейшей доработки.</p>
26 <p>Последнего коммита больше не существует. При этом сделанные в нем изменения не пропали. Они находятся в рабочей директории для дальнейшей доработки.</p>
27 <h2>Выводы</h2>
27 <h2>Выводы</h2>
28 <ul><li><p>Git позволяет отменять, даже если допущена ошибка, всегда есть возможность её исправить. Это можно сделать несколькими способами</p>
28 <ul><li><p>Git позволяет отменять, даже если допущена ошибка, всегда есть возможность её исправить. Это можно сделать несколькими способами</p>
29 </li>
29 </li>
30 <li><p>git revert - безопасный способ отмены коммитов. Он создаёт новый коммит, который отменяет изменения предыдущего. Это полезно при работе в команде, так как не меняет историю коммитов.</p>
30 <li><p>git revert - безопасный способ отмены коммитов. Он создаёт новый коммит, который отменяет изменения предыдущего. Это полезно при работе в команде, так как не меняет историю коммитов.</p>
31 </li>
31 </li>
32 <li><p>git reset - мощный, но потенциально опасный инструмент. Он позволяет отменять коммиты, но при этом может изменить или удалить изменения:</p>
32 <li><p>git reset - мощный, но потенциально опасный инструмент. Он позволяет отменять коммиты, но при этом может изменить или удалить изменения:</p>
33 <ul><li>git reset --soft оставляет изменения в индексе.</li>
33 <ul><li>git reset --soft оставляет изменения в индексе.</li>
34 <li>git reset --mixed (по умолчанию) снимает индексацию, но оставляет изменения в рабочей директории.</li>
34 <li>git reset --mixed (по умолчанию) снимает индексацию, но оставляет изменения в рабочей директории.</li>
35 <li>git reset --hard полностью удаляет изменения, и их нельзя восстановить без специальных команд.</li>
35 <li>git reset --hard полностью удаляет изменения, и их нельзя восстановить без специальных команд.</li>
36 </ul></li>
36 </ul></li>
37 <li><p>Изменять историю коммитов нужно с осторожностью. Если коммиты уже отправлены в удалённый репозиторий, лучше использовать git revert, так как git reset может привести к проблемам при синхронизации с другими разработчиками.</p>
37 <li><p>Изменять историю коммитов нужно с осторожностью. Если коммиты уже отправлены в удалённый репозиторий, лучше использовать git revert, так как git reset может привести к проблемам при синхронизации с другими разработчиками.</p>
38 </li>
38 </li>
39 <li><p>Правильный подход в Git - двигаться вперёд. Если в коммите ошибка, проще сделать новый исправляющий коммит, чем менять историю.</p>
39 <li><p>Правильный подход в Git - двигаться вперёд. Если в коммите ошибка, проще сделать новый исправляющий коммит, чем менять историю.</p>
40 </li>
40 </li>
41 <li><p>Перед использованием git reset --hard важно убедиться, что важные изменения не будут потеряны.</p>
41 <li><p>Перед использованием git reset --hard важно убедиться, что важные изменения не будут потеряны.</p>
42 </li>
42 </li>
43 </ul><p>Таким образом, Git предоставляет инструменты для гибкого управления изменениями, но их использование требует понимания возможных последствий.</p>
43 </ul><p>Таким образом, Git предоставляет инструменты для гибкого управления изменениями, но их использование требует понимания возможных последствий.</p>