Чтобы удалить некоторые файлы из фиксации 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
См. Это руководство для Git коммитов отмены в Local, Public и Git Branch Как отменить Git Commits как pro
Вы знаете, что нужно git?
git undo
, вот и все. Затем пропадает репутация git в отношении ошибок, допущенных нами, простыми смертными. Реализуйте, поместив текущее состояние в стек git перед выполнением любой командыgit
. Это повлияет на производительность, поэтому было бы лучше добавить флаг конфигурации, указывающий, следует ли его включать.@YiminRong Это можно сделать с помощью функции Git
alias
: git-scm.com/book/en/v2/Git-Basics-Git-AliasesДля пользователей VsCode просто введите ctrl + shift + G, а затем нажмите на три точки, то есть дополнительные параметры, а затем нажмите Отменить последнюю фиксацию.
@YiminRong Undo что именно ? Есть десятки очень разных функциональных случаев, когда «отмена» означает что-то совершенно . Готов поспорить, добавление новой причудливой «волшебной палочки» только еще больше запутает ситуацию.
@YiminRong Не покупаю. Люди по-прежнему будут возиться и отменять вещи, чтобы их нельзя было отменить. Но что более важно,
git reflog
уже близок к тому, что вы описываете, но дает пользователю больше контроля над тем, что нужно (не) делать. Но, пожалуйста, нет, «отменить» не везде одинаково, и люди ожидали, много разных вещей, чтобы реализовать эту функцию. Отменить последнюю фиксацию? Отменить последнее действие? Если последним действием было нажатие, как именно отменить (сбросить и нажать) или (вернуться и нажать)?См. Диаграмму из Git. Он показывает все возможные способы испортить код и способы их устранения.
@RomainValeri Правильная критика. Но «у х есть проблемы» не является достаточным аргументом для оправдания «не делай х».
Чтобы сделать что-то простое в git, выполните либо невероятно сложную задачу A, либо невероятно сложную задачу B. Затем немного испортите ее и попробуйте вернуться, выполнив невероятно сложную задачу C или невероятно сложную задачу D.
Git - это платформа для управления версиями многих файлов и обеспечения совместной работы. Это требует абсолютного контроля над тем, что вы делаете для достижения этих целей. Это здорово, , именно , потому что пытается убрать всю ненужную "магию". Что-то вроде
git undo
- это вообще плохая идея, но ее до смешного легко реализовать, если вы действительно этого хотите. Но знайте, вы несете за это ответственность. Я нахожу действительно удивительным, как люди так быстро отказываются от контроля, чтобы не учиться чему-то. Git простой , вам просто нужно изучить концепции.«отменить то, что нельзя отменить» - Это будет все. Как я могу действительно доверять свой исходный код чему-то, что позволяет мне (или другим) изменять историю?