Как удалить файл из git repo?

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

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

1600
12 янв. '10 в 10:48
источник поделиться
18 ответов

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

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  
2660
12 янв. '10 в 10:52
источник

Связанные вопросы


Похожие вопросы

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

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

Ниже приведена точная ситуация, когда я использую git для поддержания контроля версий для моего бизнес-сайта, но каталог "mickey" был папкой tmp для совместного использования частного контента с разработчиком САПР. Когда ему нужны ОГРОМНЫЕ файлы, я сделал приватный, несвязанный каталог и ftpd файлы там, которые он мог получить через браузер. Забыв, я сделал это, я позже выполнил 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 разделяет пару большие ресурсы: Эта страница имеет графику, которая помогает demystify git для меня. Книга "Pro Git" находится в сети и мне очень помогает.

575
25 мая '13 в 23:26
источник

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

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

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


delete button

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

commit a deletion

И просто так, его нет.

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

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

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

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

63
04 июля '13 в 23:53
источник

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

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

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

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

50
27 февр. '15 в 22:29
источник

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

git rm -r foldername
33
17 апр. '15 в 18:41
источник

В более общем плане 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
23
12 янв. '10 в 11:21
источник

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

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

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

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

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

    bykov@gitserver:~/temp> git rm -f file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
15
20 марта '15 в 15:13
источник

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

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

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

Если вы хотите полностью уничтожить его за один шаг, я рекомендую вам использовать 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, чтобы полностью избавиться от этого файла в вашем репо.

12
23 янв. '17 в 15:56
источник

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

rm file1.txt

git commit -a -m "Deleting files"

git push origin master
10
06 окт. '15 в 6:07
источник

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

git rm имя_файла

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

git clean -fdx

7
23 авг. '16 в 16:56
источник

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

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

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

5
23 авг. '16 в 15:03
источник

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

  • Нажмите "Синхронизировать".
  • Нажмите на каталог, в котором находится файл, и выберите последнюю версию файла.
  • Нажмите на инструменты и выберите "Открыть оболочку здесь".
  • В оболочке введите: "rm {filename}" и нажмите enter.
  • Зафиксируйте изменения и повторите процедуру.
5
14 марта '13 в 18:15
источник

Примечание: если вы хотите удалить файл только из 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

Dont 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.

Читайте больше на официальном документе.

3
07 окт. '18 в 5:57
источник
  • Сначала удалите файлы из локального репозитория.

    git rm -r Имя файла

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

    git rm --cached Имя файла

  • Во-вторых, Commit вносит изменения в локальный репозиторий.

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

    git push 
    
3
18 окт. '16 в 7:00
источник

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

  1. переместить весь локальный репо в другое место
  2. снова клонируйте репо с мастера на локальный диск
  3. скопируйте обратно файлы/папки из оригинальной копии в # 1 обратно в новый клон из # 2
  4. убедитесь, что файл большой проблемы либо отсутствует, либо исключен из файла .gitignore
  5. сделать обычный git add/git commit/git push
2
21 марта '18 в 21:22
источник

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

0
30 сент. '18 в 20:26
источник

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

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

/*/obj
/*/bin

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

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

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

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

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

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

0
27 июля '18 в 4:59
источник

Если вы не делаете файл в своем локальном репо, а в репозитории git, просто откройте файл в git repo через веб-интерфейс и найдите кнопку "Удалить" в правом углу интерфейса. Нажмите здесь, чтобы просмотреть интерфейс Удалить параметр

-7
30 нояб. '16 в 18:47
источник

Посмотрите другие вопросы по меткам или Задайте вопрос