Обычно, чтобы отменить изменения в файле, вы должны сделать:
git checkout -- <file>
Что если изменение, которое я хочу отменить, удаляет файл? Приведенная выше строка выдаст ошибку:
error: pathspec '<file>' did not match any file(s) known to git.
Какая команда восстановит этот файл без отмены других изменений?
Бонус: также, что если изменение, которое я хочу отменить, добавит файл? Я хотел бы также узнать, как это изменить.
git
git-checkout
lurscher
источник
источник
Ответы:
Предполагая, что вы хотите отменить эффекты
git rm <file>
илиrm <file>
последующиеgit add -A
или что-то подобное:Для отмены
git add <file>
достаточно первой строки выше, если вы еще не подтвердили.источник
--
ключ.git reset <file>
не работает, что и привело меня сюда.end-of-options-marker
требуется только в случае удаленного файла?git reset HEAD <file>
, что эквивалентно), ноgit reset
обрабатывает свой первый аргумент передend-of-options-marker
именем ref, а не именем файла. Может ли это быть написано более гибко? Вероятно. Почему не так? Наверное, только разработчики знают наверняка.git reset filename
отлично работает для не удаленных файлов.git reset <file>
иgit reset -- <file>
. Мне трудно найти ответ на этот вопрос в Google.На оба вопроса дан ответ
git status
.Чтобы отключить добавление нового файла, используйте
git rm --cached filename.ext
Чтобы удалить удаление файла, используйте
git reset HEAD filename.ext
С другой стороны,
git checkout --
никогда не бывает нестабильным, он просто отбрасывает не поэтапные изменения.источник
git status
цитируемое; показывает пользователям способ самопомощи сейчас и в следующий раз, а также в случае добавления или обновления информации в будущих версиях git.git reset
тем . Послеgit reset
, вы видите «изменился , но не обновляется» , что означает «Изменения не поставлена» на родном языке авторов GIT, по- видимому. Что еще более важно, вся догма о «git status говорит вам все, что вы знаете» - ложь. (Менеджеры, которые говорят, что тратят время людей и должны быть уволены.)Ответы на два ваших вопроса связаны между собой. Начну со второго:
После того, как вы подготовили файл (часто с помощью
git add
, хотя некоторые другие команды также неявно вносят изменения, напримерgit rm
), вы можете отменить это изменение с помощьюgit reset -- <file>
.В вашем случае вы должны были использовать
git rm
для удаления файла, что эквивалентно простому удалению его сrm
последующим внесением этого изменения. Если вы сначала отключили его,git reset -- <file>
вы можете восстановить его с помощьюgit checkout -- <file>
.источник
Если он был поставлен и зафиксирован, файл будет сброшен следующим образом:
Это будет работать для удаления, которое произошло несколькими коммитами предыдущего.
источник
git revert COMMIT_HASH
Начиная с git v2.23 , у вас есть другая опция:
git restore --staged -- <file>
источник