Чтобы удалить некоторые файлы из фиксации Git, используйте команду «git reset» с параметром «–soft» и укажите фиксацию перед HEAD.
$ git reset --soft HEAD~1
При запуске этой команды вам будут представлены файлы из самой последней фиксации (HEAD), и вы сможете их зафиксировать.
Теперь, когда ваши файлы находятся в промежуточной области, вы можете удалить их (или отключить их), снова используя команду «git reset».
$ git reset HEAD <file>
Примечание: на этот раз вы выполняете сброс из HEAD, поскольку вы просто хотите исключить файлы из области подготовки.
Если вас просто больше не интересует этот файл, вы можете использовать команду «git rm», чтобы удалить файл из индекса (также называемого промежуточной областью).
$ git rm --cached <file>
Когда вы закончите с модификациями, вы можете просто снова зафиксировать их с помощью опции «–amend».
$ git commit --amend
Чтобы убедиться, что файлы были правильно удалены из репозитория, вы можете запустить команду «git ls-files» и убедиться, что файл не отображается в файле (если он, конечно, новый).
$ git ls-files
<file1>
<file2>
Удаление файла из фиксации с помощью Git Restore
Начиная с Git 2.23, появился новый способ удаления файлов из фиксации, но вам нужно будет убедиться, что вы используете версию Git выше или равную 2.23.
$ git --version
Git версии 2.24.1
Примечание: Git 2.23 был выпущен в августе 2019 года, и у вас может не быть этой версии на вашем компьютере.
Чтобы установить более новые версии Git, вы можете проверить это руководство. Чтобы удалить файлы из коммитов, используйте команду «git restore», укажите источник с помощью опции «–source» и файл, который нужно удалить из репозитория.
Например, чтобы удалить файл с именем «myfile» из HEAD, вы должны написать следующую команду
$ git restore --source=HEAD^ --staged -- <file>
В качестве примера представим, что вы редактировали файл в своей последней фиксации в своей «основной» ветке.
Файл зафиксирован правильно, но вы хотите удалить его из репозитория Git.
Чтобы удалить файл из репозитория Git, вам нужно сначала восстановить его.
$ git restore --source=HEAD^ --staged -- newfile
$ git status
В ветке master
Ваша ветка опережает origin / master на 1 коммит. (используйте git push для публикации ваших локальных коммитов)
Изменения, которые необходимо зафиксировать:
(use "git restore --staged <file>..." to unstage)
modified: newfile
Изменения, не предназначенные для фиксации:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: newfile
Как видите, ваш файл вернулся в область подготовки.
Оттуда у вас есть два варианта: вы можете изменить свой файл, чтобы повторно зафиксировать его, или просто удалить его из своего репозитория Git.
Удалить файл из репозитория Git
В этом разделе мы собираемся описать шаги, чтобы удалить файл из вашего репозитория Git.
Во-первых, вам нужно деактивировать файл, так как вы не сможете удалить его, если он поставлен.
Чтобы отключить файл, используйте команду «git reset» и укажите HEAD в качестве источника.
$ git reset HEAD newfile
Если ваш файл правильно не настроен, используйте команду «git rm» с параметром «–cached», чтобы удалить этот файл из индекса Git (это не приведет к удалению файла на диске).
$ git rm --cached newfile
rm 'новый файл'
Теперь, если вы проверите статус репозитория, вы увидите, что Git произвел фиксацию удаления.
$ git status
В ветке master
Ваша ветка опережает origin / master на 1 коммит. (используйте git push для публикации ваших локальных коммитов)
Изменения, которые необходимо зафиксировать:
(use "git restore --staged <file>..." to unstage)
deleted: newfile
Теперь, когда ваш файл подготовлен, просто используйте «git commit» с опцией «–amend», чтобы внести поправки в самую последнюю фиксацию из вашего репозитория.
`$ git commit --amend
[master 90f8bb1] Commit from HEAD
Date: Fri Dec 20 03:29:50 2019 -0500
1 file changed, 2 deletions(-)
delete mode 100644 newfile
`Как видите, это не создаст новую фиксацию, но существенно изменит самую последнюю фиксацию, чтобы включить ваши изменения.
Удаление определенного файла из фиксации Git
В некоторых случаях вы не хотите, чтобы все файлы были помещены снова: вам нужно только один, чтобы изменить один очень конкретный файл в вашем репозитории.
Чтобы удалить определенный файл из фиксации Git, используйте команду «git reset» с параметром «–soft», укажите фиксацию перед HEAD и файл, который вы хотите удалить.
$ git reset HEAD^ -- <file>
Когда вы закончите с изменениями, ваш файл вернется в область подготовки.
Во-первых, вы можете удалить файл из промежуточной области с помощью команды «git reset» и указать, что вы хотите выполнить сброс из HEAD.
$ git reset HEAD <file>
Примечание: это не означает, что вы потеряете изменения в этом файле, просто файл будет удален из промежуточной области.
Если вы хотите полностью удалить файл из индекса, вам нужно будет использовать команду «git rm» с параметром «–cached».
$ git reset HEAD <file>
Чтобы убедиться, что ваш файл был правильно удален из области подготовки, используйте команду «git ls-files» для вывода списка файлов, принадлежащих к индексу.
$ git ls-files
Когда вы полностью закончите свои модификации, вы можете исправить коммит, из которого вы удалили файлы, используя команду «git commit» с опцией «–amend».
$ git commit --amend
person
Community
schedule
22.11.2020
git undo
, вот и все. Затем пропадает репутация git в отношении ошибок, допущенных нами, простыми смертными. Реализуйте, поместив текущее состояние в стек git перед выполнением любой командыgit
. Это повлияет на производительность, поэтому было бы лучше добавить флаг конфигурации, указывающий, следует ли его включать. - person Yimin Rong   schedule 20.03.2018alias
: git-scm .com / book / en / v2 / Git-Basics-Git-Aliases - person Edric   schedule 05.10.2018git reflog
уже близок к тому, что вы описываете, но дает пользователю больше контроля над тем, что нужно (не) делать. Но, пожалуйста, нет, отмена не работает везде одинаково, и люди ожидают множества разных вещей, которые она даст. Отменить последнюю фиксацию? Отменить последнее действие? Если последним действием было нажатие, как именно отменить (сбросить и нажать) или (вернуться и нажать)? - person RomainValeri   schedule 25.03.2020