Как откатить изменения сделанные после "git add" но до "git commit"?

Рейтинг: 2Ответов: 1Опубликовано: 13.02.2023

В репозиторий когда-то был добавлен файл src\test1.cpp далее пойдет речь о трех состояниях файла:

  1. На момент git checkout из удаленной ветки
  2. Сделаны изменения и выполнена команда git add src\test1.cpp
  3. Сделаны еще изменения в этом же src\test1.cpp файле, но git add не выполняли

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

Как разработчику откатить файл src\test1.cpp к состоянию 2 ?

Напомню о том, как работают некоторые команды:

  • git reset src\test1.cpp - откат проиндексированных изменений, но они остаются файлововой системе. Другими словами как будто бы git add вообще никогда не делали, а это не то что надо!
  • git checkout src\test1.cpp - откат проиндексированных и удаление изменений на файловой системе

После обеих этих команд проиндексированные изменения исчезают! А это не то что надо. Нужно их сохранить.

Ответы

▲ 3Принят

Вам нужна команда git restore:

git restore src\test1.cpp

Она отменяет изменения в локальной копии, которые еще не добавлены в индекс.

Обратите внимание, что git status подсказывает, какие команды что делают в данной ситуации. В этом случае полезна часть про to discard changes in working directory:

On branch my-branch
Your branch is ahead of 'origin/my-branch' by 2 commits.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    modified: src/test1.cpp

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified: src/test1.cpp