Как я могу удалить файл из git repo? - PullRequest
1660 голосов
/ 12 января 2010

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

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

Ответы [ 18 ]

5 голосов
/ 14 марта 2013

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

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

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

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

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

4 голосов
/ 07 октября 2018

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

OPTIONS

<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 to удалить каталоги / файл1 и каталоги / файл2) можно удалить все файлы в каталог, и рекурсивно все подкаталоги, но это требует опция -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.

- игнорировать-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 голосов
/ 18 октября 2016
  1. Сначала удалите файлы из локального репозитория.

    git rm -r File-Name

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

    git rm - кэшированное имя файла

  2. Во-вторых, зафиксировать изменения в локальном хранилище.

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

    git push 
    
2 голосов
/ 21 марта 2018

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

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

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

0 голосов
/ 27 июля 2018

У меня есть файлы 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 голосов
/ 30 ноября 2016

В случае, если вы не используете файл в локальном репо, а в git-репо, просто откройте файл в git-репо через веб-интерфейс и найдите кнопку «Удалить» в правом углу интерфейса. Нажмите здесь, для просмотра интерфейса Удалить опцию

...