
> git undo, cancel, revert — отмена commit с сохранением изменений, любым словом▋
Все запросы keep-changes из нашей собственной поисковой доски — undo, cancel, revert — разобраны на одной странице: команда под каждую ситуацию, ловушка --hard и reflog как страховочная сетка.
mrsaynothing· 11 октября 2026 г.· 6 мин чтения
git reset --soft HEAD~1Git поставляет пять глаголов для возврата кода — undo, cancel, revert, reset, restore — и ни один из них на самом деле не называется undo. Где-то очень гордится собой словарь синонимов.
Вот во что обходится словарь. На прошлой неделе головной запрос семьи — git undo last commit keep changes — собрал 73 показа на позиции 11.1 без единого клика, с ростом +100% неделя к неделе, и в сопровождении четырёх кузенов с другим написанием. Люди не путаются в git. Они боятся --hard, и каждый дежурный туториал отвечает на этот страх единственным флагом, который его подтверждает. Эта страница проходит семью сверху вниз: выберите глагол, сверьтесь с таблицей и только потом трогайте историю.
| Глагол, который набирают | Что git делает на самом деле | Сохраняет работу? | Команда |
|---|---|---|---|
| "undo" | Метка ветки отступает на commit; изменения возвращаются в staging | Да — в индексе | git reset --soft HEAD~1 |
| "cancel" | Reset по умолчанию: метка отступает, изменения возвращаются, но без staging | Да — в рабочем дереве | git reset HEAD~1 |
| "revert" | Добавляется новый commit, отменяющий старый; история никогда не переписывается | Да — как обратный diff | git revert HEAD |
| "unstage" | Пути покидают индекс; содержимое файлов не тронуто | Да — из рабочего дерева ничего не ушло | git restore --staged file.txt |
| "отложи на потом" | Работа упаковывается и ставится на полку, куда можно вернуться | Да — в стеке stash | git stash push -m "wip" |
Единственное решение, которое имеет значение
Как отменить последний commit, сохранив изменения?
git reset --soft HEAD~1 — метка ветки отступает на один commit, и всё сделанное возвращается в staging. Ничего не удаляется, ничего не покидает индекс; можно закоммитить заново с лучшим сообщением или разбить работу. Полный разбор, включая случай с push, — в git undo last commit: keep changes, stay safe.
verify: после reset команда git status должна показать ваши файлы в блоке «Changes to be committed» — это ваша работа, возвращённая вам.
"git undo commit keep changes" значит что-то другое?
Нет — тот же вопрос, тот же ответ. «Undo» никогда не был командой git; наша доска показывает оба написания, нацеленные на идентичные проблемы, и оба решаются reset --soft. Когда люди говорят undo, они имеют в виду двинь метку, сохрани работу — единственное, что soft reset делал вообще всегда.
Почему у "git revert last commit keep changes" другой ответ?
Потому что revert — единственный член семьи, который добавляет историю, а не перематывает её. git revert HEAD создаёт новый commit, чей diff отменяет старый — «сохранение изменений» происходит само, плохой commit остаётся в журнале, а рабочее дерево остаётся без него. Это правильный инструмент, как только кто-то чужой скачал ветку; развилка reset-vs-revert размечена в git revert vs reset: which one saves your history?
Revert = публичная отмена. Он никогда не переписывает то, что у других уже есть; он отменяет изменение новым, аддитивным commit'ом.
"git cancel commit" — это настоящая команда?
Нет — cancel это разговорная речь, а перевод разговорной речи на git — reset. «Cancel commit but keep changes» и «cancel last commit but keep changes» — ещё два написания той же недели на нашей доске — оба сводятся к git reset --soft HEAD~1. Git заботят только метка, которую вы двигаете, и флаг, который вы передаёте; словарный запас приносите с собой.
Можно удалить commit, который никто не скачивал?
Да — неотправленный commit всё ещё ваш, и его можно перекроить без последствий. reset --soft сохраняет работу, reset HEAD~1 сохраняет её без staging, и только --hard её выбрасывает — единственный «несохраняющий» глагол на этой странице. Если commit вообще не ваш и на него ничто не ссылается, соберёт его в итоге git gc, а не вы.
Можно сделать stash одного файла?
Да — git stash push -m "wip" -- src/app.ts откладывает один путь и не трогает остальное дерево. Разделитель -- как раз ограничивает stash именованными путями. Пограничные случаи одного файла — включая то, почему stash переживает checkout, — живут в git stash a single file without losing the rest.
Можно cherry-pick нескольких commit'ов?
Да — диапазон: git cherry-pick A^..B берёт все commit'ы после A до B включительно, по порядку. Добавьте -n, если хотите получить их в staging одной кучей вместо отдельных коммитов. Руководство по конфликтам для трудных диапазонов — в git cherry pick: multiple commits, branches, conflicts.
Как cherry-pick несколько commit'ов из другой ветки?
Тот же диапазон работает между ветками: git switch target && git cherry-pick A^..B. Git разрешает commit'ы из исходной ветки и повторяет их на вашей — ждите конфликтов там, где ветки разошлись, и разбирайте их по одному, а не скопом.
Можно вернуть потерянный commit?
Почти всегда да — reflog помнит, где был HEAD, около 90 дней по умолчанию (gc.reflogExpire в git). Найдите потерянный hash через git reflog, затем git reset --soft HEAD@{1}, чтобы вернуть его под рабочее дерево. Вы ничего не отменяете — вы двигаете метку, пока git тихо хранит квитанции.
Какой git undo использовать?
Тот, что в таблице выше, честно — а если хотите, чтобы выбрала машина: git-undo генератор принимает ваш хаос на вход и печатает точную команду, а его релизный пост показывает рассуждение по каждому случаю. Все проверенные спасения кластера сложены в хабе git-undo.
Ловушка в комнате: --soft, --mixed, --hard
Флаг решает, куда приземлится работа, и опасен лишь один из трёх. --soft вернёт её в staging, --mixed (по умолчанию) — без staging, --hard подгоняет всё под целевой commit и выбрасывает остальное. Если вы уже набрали --hard в панике: reflog держит commit ещё ~90 дней — git reflog, затем reset на hash. Глагол, набранный в первые пять секунд, не решает ничего навсегда; дневник git длиннее вашего сожаления.
Какое написание привело вас сюда — undo, cancel или revert? Скажите в комментариях; генератор принимает все три, а самое странное станет следующим постом. Доска говорит, что большинство набрало undo — данные были здесь раньше совета.
$ Похожие записи · git undo
vLLM GGUF FAQ: Ten Search Questions, Answered
Ten real search questions about vLLM and GGUF — CPU support, serve syntax, quant coverage, the tokenizer trap — answered from the docs and our tested posts.
2026-10-09 · 6 мин чтения

git merge vs rebase — decide in 10 seconds
Merge or rebase, one question decides: did the commit leave your machine? The decision table, the fast-forward case, and the reflog fix when a rebase goes wrong.
2026-10-05 · 7 мин чтения

git stash a Single File Without Losing the Rest
Stash one file while the rest of your work stays put: git stash push -- <path>, then pop one file back out of any stash with git restore. Copy-paste commands.
2026-09-21 · 6 мин чтения

Git Revert vs Reset: Which One Saves Your History?
Git revert vs reset explained: which command undoes commits safely, when reset --hard destroys work, and how each rewrites shared GitHub history.
2026-09-15 · 7 мин чтения
