Как удалить файл из репозитория Git?

Я добавил файл с именем "file1.txt" в репозиторий Git. После этого я зафиксировал его, добавил пару каталогов с именами dir1 и dir2 и зафиксировал их в репозитории Git.

Теперь в текущем репозитории есть "file1.txt", dir1 и dir2. Как я могу удалить "file1.txt", не затрагивая других, например dir1 и dir2?


person webminal.org    schedule 12.01.2010    source источник
comment
git rm - правильный ответ, но помните, что файл все равно останется в истории. Если вы хотите удалить файл, потому что в нем была конфиденциальная информация, вам нужно сделать что-то более радикальное. (Изменение истории, особенно для контента, который вы уже разместили, - это радикальное действие, и его по возможности следует избегать.)   -  person Keith Thompson    schedule 17.05.2013
comment
Примечание: на GitHub теперь вы можете напрямую удалить файл из веб-интерфейса (без необходимости даже клонировать репо). См. мой ответ ниже.   -  person VonC    schedule 05.07.2013
comment
@KeithThompson, какие шаги могут быть, если я отчаянно хочу это сделать?   -  person lessthanl0l    schedule 21.02.2014
comment
@ lessthanl0l: stackoverflow.com/q/872565/827263   -  person Keith Thompson    schedule 21.02.2014
comment
связанные help.github.com/articles/   -  person Trevor Boyd Smith    schedule 21.06.2018


Ответы (24)


Используйте git rm.

Если вы хотите удалить файл из репозитория Git и файловой системы, используйте:

git rm file1.txt
git commit -m "remove file1.txt"

Но если вы хотите удалить файл только из репозитория Git, а не удалять его из файловой системы, используйте:

git rm --cached file1.txt
git commit -m "remove file1.txt"

И для внесения изменений в удаленное репо

git push origin branch_name
person Greg Hewgill    schedule 12.01.2010
comment
Также удобно: git rm -r directory // Для удаления каталога и содержимого - person Reg; 15.11.2014
comment
Однако это не поможет избавиться от этого файла в других коммитах. - person VaTo; 17.06.2015
comment
@SaulOrtega: Верно. Чтобы удалить файл из предыдущих коммитов (изменение прошлой истории), см. Страницу справки GitHub на странице Удалить конфиденциальные данные. - person Greg Hewgill; 17.06.2015
comment
Обратите внимание, что это тоже удалит файл локально. Если вы хотите удалить его только из репозитория, выполните: git rm --cached file1.txt - person Weston Ganger; 20.08.2015
comment
@Juampi: Да, конечно, почти все используют локальное репо, поэтому публикация его для этого - идеальный способ ... - person Toskan; 01.10.2015
comment
Стоит отметить, что если этот файл содержал конфиденциальную информацию (например, учетные данные), вы должны немедленно изменить эти учетные данные. Цитата GitHub После того, как вы отправили фиксацию на GitHub, вам следует подумать о любые содержащиеся в нем данные могут быть скомпрометированы. Если вы подтвердили пароль, измените его! Если вы зафиксировали ключ, сгенерируйте новый. - person c1moore; 14.09.2016
comment
git rm - это очень опасная команда, ее следует отметить жирным шрифтом, что она также удаляет файлы из системы. - person Lau; 23.03.2017
comment
@Wideem: Я не понимаю, почему это что-то другое, кроме очевидного поведения команды с именем rm. - person Greg Hewgill; 23.03.2017
comment
@GregHewgill, если это была rm команда, которая была очевидна, но git rm имя может предполагать, что она просто удаляет файлы из git, поэтому особенно пользователи Windows могут случайно удалить свои драгоценные файлы - person Lau; 23.03.2017
comment
@Wideem: Если вы удалите драгоценный файл с помощью git rm, он все еще в git, так что нет проблем. - person Greg Hewgill; 23.03.2017
comment
Чем git rm --cached отличается от gitignore? - person Shashwat; 28.06.2017
comment
@Shashwat: .gitignore применяется только к файлам, которые не отслеживаются. - person Greg Hewgill; 28.06.2017
comment
что, если кто-то уже вытащил файл file1.txt, и он находится в их локальном репо. Когда я удалю его (не используя --cached) и нажму, будет ли он удален из их локального репо, когда они снова потянут? - person Blake; 13.04.2018
comment
git commit -m file deleted file1.txt # не забудьте указать имена файлов - person srpatch; 30.04.2018
comment
О боже, если щелкнуть правой кнопкой мыши в любом инструменте git, который просто удаляет файл отовсюду. Я трачу столько времени на этот забытый богом инструмент. Я пытаюсь использовать это, чтобы удалить папку, и получаю фатальный недопустимый путь, не совпадающий ни с одним файлом. Я вижу мощь этого инструмента, но я ненавижу тратить полдня, пытаясь понять, как удалить файл. - person Nick.McDermaid; 27.07.2018
comment
Удаление файла из git с помощью git rm --cached filename сработало отлично. Этот параметр --cached удаляет файлы только из кеша, но не из файловой системы. Запуск git status показывает, что файл был удален, а это именно то, что я хотел. - person Erich Meissner; 02.06.2020
comment
Я неправильно понял эту команду и тоже удалил файл из удаленного репо. Я искал: git checkout HEAD^ -- /path/to/file stackoverflow.com/a/22041320/3051080. Git: удалить зафиксированный файл после нажатия - person Gus; 29.07.2020
comment
создание rm-файла в Linux удалит его только из файловой системы, а не из git. Спасатель жизни. - person Timo; 12.08.2020
comment
В bitbucket вам нужно сделать git rm --cached <name of the file to be deleted> и отправить команду по почте, чтобы они могли выполнить полное удаление из bitbucket, запустив git gc со своей стороны (Ссылка). Как это работает в GitHub? Нужно ли обращаться в службу поддержки. Моя цель - убедиться, что удаленный файл удален из всей истории коммитов, чтобы моя квота на размер GitHub не использовалась этими файлами. - person vineeshvs; 09.10.2020

git rm file.txt удаляет файл из репозитория, но также удаляет его из локальной файловой системы.

Чтобы удалить файл из репозитория и не удалять его из локальной файловой системы, используйте:
git rm --cached file.txt

В приведенной ниже конкретной ситуации я использую git для управления версиями веб-сайта моей компании, но каталог «mickey» был папкой tmp для обмена личным контентом с разработчиком САПР. Когда ему понадобились ОГРОМНЫЕ файлы, я создал личный, несвязанный каталог и загрузил туда файлы по ftp, чтобы он мог их загрузить через браузер. Забыв об этом, я позже выполнил git add -A из базового каталога веб-сайта. Впоследствии git status показал новые файлы, требующие фиксации. Теперь мне нужно было удалить их из системы отслеживания и контроля версий git ...

Ниже приведен пример вывода из того, что только что произошло со мной, когда я случайно удалил файл .003. К счастью, меня не волнует, что случилось с локальной копией .003, но некоторые из других измененных в настоящее время файлов были обновлениями, которые я только что внес на веб-сайт, и было бы здорово, если бы они были удалены в локальной файловой системе! «Локальная файловая система» = действующий веб-сайт (не очень хорошая практика, но это реальность).

[~/www]$ git rm shop/mickey/mtt_flange_SCN.7z.003
error: 'shop/mickey/mtt_flange_SCN.7z.003' has local modifications
(use --cached to keep the file, or -f to force removal)
[~/www]$ git rm -f shop/mickey/mtt_flange_SCN.7z.003
rm 'shop/mickey/mtt_flange_SCN.7z.003'
[~/www]$ 
[~/www]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   shop/mickey/mtt_flange_SCN.7z.001
#   modified:   shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001  shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ 
[~/www]$ 
[~/www]$ git rm --cached shop/mickey/mtt_flange_SCN.7z.002
rm 'shop/mickey/mtt_flange_SCN.7z.002'
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001  shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ 
[~/www]$ 
[~/www]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.002
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   modified:   shop/mickey/mtt_flange_SCN.7z.001
[~/www]$

Обновление: Этот ответ привлекает некоторый трафик, поэтому я подумал, что упомянул бы свои другие ответы Git. пара замечательных ресурсов: На этой странице есть изображения, помогающие демистифицировать Git для меня. Книга "Pro Git" доступна в Интернете и очень мне помогает.

person Chris K    schedule 25.05.2013
comment
Затем вам нужно будет зафиксировать это с помощью чего-то вроде git commit -m "Just removing file1.txt", а затем, если у вас есть удаленный репозиторий, нажмите фиксацию с чем-то вроде git push origin master. - person ban-geoengineering; 10.06.2014

Во-первых, если вы используете git rm, особенно для нескольких файлов, учтите, что любой подстановочный знак будет разрешен. оболочкой, а не командой git.

git rm -- *.anExtension
git commit -m "remove multiple files"

Но если ваш файл уже находится на GitHub, можно (с июля 2013 г.) удалите его напрямую из веб-интерфейса!

Просто просмотрите любой файл в своем репозитории, щелкните значок корзины вверху и подтвердите удаление, как и любое другое редактирование через Интернет.

Затем git pull в вашем локальном репозитории, и это тоже удалит файл локально.
Что делает этот ответ (окольным) способом удалить файл из репозитория git?
(Не говоря уже о том, что файл на GitHub находится в репозитории git)


кнопка удаления

(фиксация будет отражать удаление этого файла):

совершить удаление

И вот так его уже нет.

Чтобы получить помощь по этим функциям, обязательно прочтите наши справочные статьи о создании, перемещение, переименование и удаление файлов.

Примечание. Поскольку это система контроля версий, Git всегда готов помочь, если вам понадобится восстановить файл позже.

Последнее предложение означает, что удаленный файл по-прежнему является частью истории, и вы можете достаточно легко восстановить его (но еще не через веб-интерфейс GitHub):

См. Раздел Восстановление удаленного файла в репозитории Git.

person VonC    schedule 04.07.2013
comment
Вам нужно прокрутить вниз и нажать «Зафиксировать изменения», чтобы зафиксировать удаление! - person LevinsonTechnologies; 18.08.2015
comment
Это не работает для больших текстовых файлов. Сервер пытается отобразить файл, как показано на скриншоте, а затем терпит неудачу с ошибкой 500. - person CapeCoder; 31.08.2016
comment
Этот ответ относится к github, вопрос касается репозитория git. Не как пользоваться интерфейсом github. - person Peter Marshall; 12.04.2017

Это единственный вариант, который у меня сработал.

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'

Примечание. Замените * .sql своим именем или типом файла. Будьте очень осторожны, потому что это будет проходить каждый коммит и извлекать этот тип файла.

РЕДАКТИРОВАТЬ: обратите внимание - после этой команды вы не сможете нажимать или тянуть - вы увидите отклонение «несвязанной истории», вы можете использовать «git push --force -u origin master», чтобы нажимать или тянуть

person Jason Glisson    schedule 27.02.2015
comment
Это отличный ответ, но обратите внимание, что в отличие от других ответов эта команда переписывает историю фиксации и удаляет все следы файлов, соответствующих шаблону. Это особенно полезно, если вы обнаружили, что случайно передали некоторую конфиденциальную информацию (и, при необходимости, можете успешно использовать --force для перезаписи истории любых удаленных репозиториев, в которые она была отправлена). - person yoniLavi; 28.04.2015
comment
Это была именно та проблема, с которой я столкнулся, и потребовалось несколько проб и ошибок, чтобы решить ее. Парень, с которым я работал, совершил несколько больших дампов базы данных в репо, вернувшись через множество коммитов. Вот почему я использовал в своем примере .sql. Мое репо стало настолько раздутым и большим, что github больше не принимал пуши. - person Jason Glisson; 19.05.2015
comment
Если вы используете удаленный мастер, вам нужно принудительно выполнить фиксацию и подтолкнуть ее с помощью git push --force -u origin master - person AlbertMarkovski; 01.09.2016
comment
@AlbertMarkovski Извините, я не уточнил. Github на самом деле не принял бы push, потому что репо превышало их размер. По крайней мере, несколько ГБ. Они прервали меня и написали мне об этом по электронной почте. Так что, к сожалению, никакое форсирование на этом этапе не поможет. - person Jason Glisson; 08.09.2016
comment
@JasonGlisson Я также столкнулся с этой проблемой, когда видео случайно добавлялось в репозиторий. - person AlbertMarkovski; 20.09.2016
comment
@AlbertMarkovski Ага. Я определенно не говорю, что это идеальное решение или лучшее решение, но я использовал его несколько раз для очистки репозиториев, которые я унаследовал. Большинство моих проектов, по крайней мере, для моей дневной работы, переместились в частные репозитории git с использованием Gitlabs, поэтому у меня нет проблемы с максимальным ограничением размера репо. - person Jason Glisson; 21.09.2016
comment
Привет, @JasonGlisson, после выполнения кода он немедленно изменяет историю коммитов, которую мы хотим. Но как нам передать это на пульт? Я выполняю код в локальной ветке development. - person SMPLYJR; 28.04.2020
comment
это позволило мне оказаться в ситуации rebase и merge - person alper; 17.11.2020
comment
@SMPLYJR Извините, я только что увидел этот комментарий. Вы разобрали? Я думаю, вам нужно принудительно запустить git push. Некоторые другие тоже упомянули об этом. Любопытно услышать, смогли ли вы заставить его работать на вас. - person Jason Glisson; 17.11.2020

Кроме того, если это папка, которую нужно удалить, и ее последующие дочерние папки или файлы, используйте:

git rm -r foldername
person Raja    schedule 17.04.2015
comment
Это также удалит папку из локального! Use git rm --cached -r <foldername> - person Axis; 08.06.2019

В более общем плане git help поможет, по крайней мере, с такими простыми вопросами:

zhasper@berens:/media/Kindle/documents$ git help
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]

The most commonly used git commands are:
   add        Add file contents to the index
   :
   rm         Remove files from the working tree and from the index
person James Polley    schedule 12.01.2010
comment
Для более сложных вещей я нахожу git help запутанным, но это хорошо для простых вещей :) - person James Polley; 12.01.2010
comment
На самом деле это не так хорошо для git noobs, потому что индекс - это не концепция, с которой git noobs знакомы. Я говорю, исходя из личного опыта, что я git noob :) Кроме того, я считаю, что гораздо менее запутанно сказать, что rm помещает файл на удаление, а не удаляет из индекса ( хотя для новичков это все еще бессмысленно). - person Roman Starkov; 04.04.2013
comment
Согласие с romkyns: описание Удалить файлы из рабочего дерева и из индекса мне не кажется, что это способ удалить файл из репо. Может, если бы я лучше понял git, так бы и стало. Вместо этого это звучит так, как будто вы просто деактивируете файлы (и, возможно, удаляете их из рабочего дерева - обязательно ли это повлияет на репо?) - person LarsH; 06.07.2016

Если вы хотите удалить файл из репо, но оставить его в файловой системе (не будет отслеживаться):

bykov@gitserver:~/temp> git rm --cached file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo"

Если вы хотите удалить файл из репо и из файловой системы, есть два варианта:

  1. Если в файле нет изменений, внесенных в индекс:

    bykov@gitserver:~/temp> git rm file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
  2. Если в файле есть изменения, внесенные в индекс:

    bykov@gitserver:~/temp> git rm -f file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
person Community    schedule 20.03.2015

git rm теперь будет удалять только файл в этой ветке, но он останется в истории, и git запомнит его.

Правильный способ сделать это - использовать git filter-branch, как уже упоминали здесь другие. Он будет перезаписывать каждую фиксацию в истории ветки, чтобы удалить этот файл.

Но даже после этого git может его запомнить, потому что на него могут быть ссылки в журнале ссылок, пультах, тегах и т. Д.

Если вы хотите полностью стереть его за один шаг, я рекомендую вам использовать git forget-blob

https://ownyourbits.com/2017/01/18/completely-remove-a-file-from-a-git-repository-with-git-forget-blob/

Это просто, просто сделай git forget-blob file1.txt.

Это удалит все ссылки, сделает git filter-branch и, наконец, запустит сборщик мусора git git gc, чтобы полностью избавиться от этого файла в вашем репозитории.

person nachoparker    schedule 23.01.2017

Примечание: если вы хотите удалить файл только из git, используйте ниже:

git rm --cached file1.txt

Если вы хотите удалить также с жесткого диска:

git rm file1.txt

Если вы хотите удалить папку (папка может содержать несколько файлов), вам следует удалить ее с помощью рекурсивной команды, как показано ниже:

git rm -r foldername

Если вы хотите удалить папку внутри другой папки

git rm -r parentFolder/childFolder

Затем вы можете использовать commit и push как обычно. Однако, если вы хотите восстановить удаленную папку, вы можете выполнить следующее: восстановить удаленные файлы из git возможно.

Из документа:

git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…​

ВАРИАНТЫ

<file>…​

Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files. If you want Git to expand file glob characters, you

может потребоваться их экранирование. Начальное имя каталога (например, dir для удаления dir / file1 и dir / file2) может быть дано для удаления всех файлов в каталоге и рекурсивно всех подкаталогов, но для этого требуется явно указать параметр -r. -f --force

Override the up-to-date check.

-n --dry-run

Don’t actually remove any file(s). Instead, just show if they exist in the index and would otherwise be removed by the command.

-r

Allow recursive removal when a leading directory name is given.

--

This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken for

параметры командной строки). --cached

Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.

--ignore-unmatch

Exit with a zero status even if no files matched.

-q --quiet

git rm normally outputs one line (in the form of an rm command) for each file removed. This option suppresses that output.

Подробнее читайте в официальном документе.

person Blasanka    schedule 07.10.2018

Другой способ, если вы хотите удалить файл из своей локальной папки с помощью команды rm, а затем отправить изменения на удаленный сервер.

rm file1.txt

git commit -a -m "Deleting files"

git push origin master
person Suhaib    schedule 06.10.2015

В моем случае я попытался удалить файл на github после нескольких коммитов, но сохранил на компьютере

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD
git push --force -u origin master

а позже этот файл был проигнорирован

person OlegV    schedule 23.08.2016

Чтобы удалить определенный файл

git rm имя файла

Чтобы очистить все неотслеживаемые файлы из каталога рекурсивно за один раз

git clean -fdx

person Sitesh    schedule 23.08.2016

Если у вас есть приложение GitHub для Windows, вы можете удалить файл за 5 простых шагов:

  • Щелкните "Синхронизировать".
  • Щелкните каталог, в котором находится файл, и выберите последнюю версию файла.
  • Нажмите на инструменты и выберите «Открыть оболочку здесь».
  • В оболочке введите: "rm {filename}" и нажмите Enter.
  • Зафиксируйте изменение и выполните повторную синхронизацию.
person jushusted    schedule 14.03.2013

Согласно документации .

git rm --cached file1.txt

Когда дело доходит до конфиденциальных данных - лучше не говорить, что вы удалили файл, а просто включите его в последний известный коммит:

0. Изменить последнюю фиксацию

git commit --amend -CHEAD

Если вы хотите удалить файл из всей истории git, согласно документация необходимо сделать следующее:

1. Удалите его из своей истории

git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \  --prune-empty --tag-name-filter cat -- --all
# Replace PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA with the path to the file you want to remove, not just its filename
  1. Не забудьте включить этот файл в .gitignore (если это файл, которым вы никогда не хотите делиться (например, пароли ...):
echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
git add .gitignore
git commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore"

3. Если вам нужно удалить с пульта

git push origin --force --all

4. Если вам также необходимо удалить его из выпусков тегов:

git push origin --force --tags
person Tomas Baran    schedule 16.05.2020

  1. # P1 #
    # P2 #
    # P3 #
    # P4 #
  2. Во-вторых, зафиксируйте изменения в локальном репозитории.

    git commit -m "unwanted files or some inline comments"   
    
  3. Наконец, обновите / отправьте локальные изменения в удаленный репозиторий.

    git push 
    
person Ajay Kumar    schedule 18.10.2016
comment
удалит ли это все, что связано со случайно добавленным и отправленным файлом? - person bapors; 15.02.2018
comment
@bapors нет, он останется в истории git - person Alaa Eddine Cherbib; 19.04.2021

Ответ Грега Хьюгилла, который редактировал Johannchopin помог мне, так как я не заботился об удалении файла из истории полностью. В моем случае это был каталог, поэтому единственное изменение, которое я сделал, - это использование:

git rm -r --cached myDirectoryName

вместо git rm --cached file1.txt .., за которым следует:

git commit -m "deleted myDirectoryName from git"
git push origin branch_name

Спасибо, Грегу Хьюгиллу и Иоганнчопин!

person wat er    schedule 03.10.2020

В случае, когда git rm недостаточно и файл необходимо удалить из истории: поскольку страница руководства git filter-branch теперь сама предлагает использовать git-filter-repo, и мне пришлось сделать это сегодня, вот пример использования этого инструмента. Он использует репозиторий примера https://example/eguser/eg.git

  1. Клонировать репозиторий в новый каталог git clone https://example/eguser/eg.git

  2. Сохраните все, кроме ненужного файла. git-filter-repo --path file1.txt --invert-paths

  3. Добавьте обратно источник удаленного репозитория: git remote add origin https://example/eguser/eg.git. Инструмент git-filter-repo преднамеренно удаляет удаленную удаленную информацию и предлагает новое удаленное репо (см. пункт 4). Это имеет смысл для больших общих репозиториев, но может оказаться излишним для избавления от одного только что добавленного файла, как в этом примере.

  4. Если вы довольны содержимым local, замените им удаленное.

    git push --force -u origin master. Требуется форсирование из-за измененной истории.

Также обратите внимание на полезную опцию --dry-run и хорошее обсуждение в связанном руководстве по динамике команды и проекта перед внесением платы и изменением истории репозитория.

person Adam Burke    schedule 07.09.2020

перейдите в каталог вашего проекта и введите:

git filter-branch --tree-filter 'rm -f <deleted-file>' HEAD

после этого нажмите --force для удаления файла из всех коммитов.

git push origin --force --all
person rojen    schedule 30.09.2020

Я перепробовал множество предложенных вариантов, но ни один из них не помог (не буду перечислять различные проблемы). То, что я в итоге сделал, что сработало, было простым и интуитивно понятным (для меня):

  1. переместить все локальное репо в другое место
  2. снова клонировать репо с мастера на локальный диск
  3. скопируйте файлы / папку из исходной копии в # 1 обратно в новый клон из # 2
  4. убедитесь, что проблемный большой файл либо отсутствует, либо исключен из файла .gitignore
  5. сделайте обычный git add / git commit / git push
person jacanterbury    schedule 21.03.2018

После того, как вы удалили файл из репо с помощью git rm, вы можете использовать BFG Repo-Cleaner чтобы полностью и легко стереть файл из истории репо.

person glisu    schedule 30.09.2018

У меня есть файлы obj и bin, которые случайно попали в репо, и я не хочу загрязнять мой список измененных файлов.

После того, как я заметил, что они перешли на пульт, я проигнорировал их, добавив это в .gitignore

/*/obj
/*/bin

Проблема в том, что они уже находятся на пульте дистанционного управления, и когда они меняются, они появляются как измененные и загрязняют список измененных файлов.

Чтобы их перестали видеть, нужно удалить всю папку из удаленного репозитория.

В командной строке:

  1. CD в ​​папку репо (т.е. C:\repos\MyRepo)
  2. Я хочу удалить SSIS \ obj. Кажется, вы можете удалить только на верхнем уровне, поэтому теперь вам нужно записать компакт-диск в SSIS: (т.е. C:\repos\MyRepo\SSIS)
  3. Now type the magic incantation git rm -r -f obj
    • rm=remove
    • -r = рекурсивно удалить
    • -f = означает силу, потому что вы действительно это имеете в виду
    • obj - это папка
  4. Теперь запустите git commit -m "remove obj folder"

Я получил тревожное сообщение о том, что 13 файлов изменены, 315222 удалений

Затем, поскольку мне не нужно было искать строку CMD, я вошел в Visual Sstudio и выполнил синхронизацию, чтобы применить ее к удаленному

person Nick.McDermaid    schedule 27.07.2018

Просто перейдя к файлу в репозитории github, вы увидите значок удаления рядом с Raw | Blame и не забудьте нажать кнопку фиксации изменений. И вы видите, что ваш файл был удален.

person nitesh mishra    schedule 03.09.2020

Если вам нужно удалить файлы с определенным расширением (например, скомпилированные файлы), вы можете сделать следующее, чтобы удалить их все сразу:

git remove -f *.pyc
person Sergi Ramón    schedule 01.10.2019

Если вы не храните файл в локальном репо, а в репозитории git, просто откройте файл в репозитории git через веб-интерфейс и найдите кнопку «Удалить» в правом углу интерфейса. Щелкните здесь, чтобы просмотреть интерфейс Удалить параметр

person Poseidon    schedule 30.11.2016