Как удалить файл из Git repo?
я добавил файл с именем "file1.txt"
в Git РЕПО. После этого я его совершил, добавил пару каталогов под названием dir1
и dir2
, и передал их в Git repo.
теперь тока РЕПО "file1.txt"
, dir1
и dir2
.
Как удалить "file1.txt"
не затрагивая других, как dir1
и dir2
?
17 ответов
использовать 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
git rm file.txt
удаляет файл из РЕПО, но также удаляет его из локальной файловой системы.
чтобы удалить файл из РЕПО и не удалить его из локальной файловой системы используйте:git rm --cached file.txt
ниже точная ситуация, когда я использую git для поддержания контроля версий для веб-сайта моего бизнеса, но каталог "mickey" был папкой tmp для обмена частным контентом с разработчиком САПР. Когда ему понадобились огромные файлы, я сделал частный, несвязанный каталог и ftpd файлы там для него, чтобы получить через браузер. Забыв, что я сделал это, я позже выполнил git add -A
из директории сайта. Впоследствии,git status
показал новые файлы, нуждающиеся в фиксации. Теперь мне нужно было удалить их из отслеживания и контроля версий git...
пример вывода ниже из того, что только что произошло со мной, где я непреднамеренно удалил . К счастью, мне все равно, что случилось с местной копией в .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 для меня. The " Pro Git " книга онлайн и мне очень помогает.
Если ваш файл уже находится на GitHub,вы сейчас (июль 2013) можете непосредственно удалить его из веб-GUI!
просто просмотрите любой файл в репозитории, щелкните значок корзины вверху и зафиксируйте удаление, как и любое другое веб-редактирование.
(фиксация будет отражать удаление этого файла):
и просто так, он ушел.
для справки с этими функциями, не забудьте прочитать наши статьи справки на создание, двигаясь, переименовать и удаление файлы.
Примечание: поскольку это система управления версиями, Git всегда имеет вашу спину, Если вам нужно восстановить файл позже.
последнее предложение означает, что удаленный файл по-прежнему является частью истории, и вы можете восстановить его достаточно легко (но еще не через веб-сайт GitHub интерфейс):
в разделе "восстановить удаленный файл в репозитории Git".
Это единственный вариант, который работал для меня.
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'
Примечание: Замените *.sql с вашим именем файла или типом файла. Будьте очень осторожны, потому что это будет проходить через каждую фиксацию и вырвать этот тип файла.
кроме того, если это папка для удаления и последующие дочерние папки или файлы, используйте:
git rm -r foldername
в целом, 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
Если вы хотите удалить файл из репозитория, но оставить его в файловой системе (будет прекращено):
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"
git rm
теперь будет удалять только файл в этой ветке, но он останется в истории, и git запомнит его.
правильный способ сделать это с git filter-branch
, как упоминали здесь другие. Он перепишет каждую фиксацию в истории ветви, чтобы удалить этот файл.
но, даже после этого, Git может это помню, потому что там могут быть ссылки на него в reflog, пультов, теги и все такое.
если вы хотите полностью уничтожить его в один шаг, я рекомендую вам использовать git forget-blob
это легко, просто сделать git forget-blob file1.txt
.
это удалит все ссылки, do git filter-branch
, и, наконец, запустите сборщик мусора git git gc
чтобы полностью избавиться от этого файла в репозитории.
другой способ, если вы хотите удалить файл из локальной папки с помощью команды rm, а затем нажмите изменения на удаленный сервер.
rm file1.txt
git commit -a -m "Deleting files"
git push origin master
удалить конкретный файл
git rm filename
чтобы рекурсивно очистить все неотслеженные файлы из каталога одним выстрелом
мерзавец чистым -FDX по
Если у вас есть приложение GitHub для Windows, вы можете удалить файл в 5 простых шагов:
- Нажмите Кнопку Синхронизации.
- нажмите на каталог, где находится файл, и выберите последнюю версию файла.
- нажмите на инструменты и выберите " Открыть оболочку здесь."
- в оболочке введите: "rm {filename}" и нажмите enter.
- зафиксируйте изменение и повторите синхронизацию.
в моем случае я попытался удалить файл на github после нескольких коммитов, но сохранить на компьютере
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD
git push --force -u origin master
и потом этот файл был проигнорирован
-
Сначала удалите файлы из локального репозитория.
git rm-r имя файла
или удалите файлы только из локального репозитория, но из файловой системы
git rm --кэшированное имя файла
-
во-вторых, зафиксировать изменения в локальном репозитории.
git commit -m "unwanted files or some inline comments"
-
наконец, обновление / push локальных изменений в удаленный репозиторий.
git push
Я пробовал много предложенных вариантов, и ни один не работал (я не буду перечислять различные проблемы). То, что я сделал, что сработало, было простым и интуитивно понятным (для меня):
- переместить весь локальный РЕПО в другом месте
- клонировать РЕПО снова с master на локальный диск
- скопируйте файлы / папку из исходной копии в #1 обратно в новый клон из #2
- убедитесь, что проблема большого файла либо нет или исключен из списка .файл gitignore
- сделайте обычный git add/git commit / git push
у меня есть файлы obj и bin, которые случайно попали в репо, что я не хочу загрязнять список "измененных файлов"
после я заметил, что они пошли на пульт, я проигнорировал их, добавив это в .gitignore
/*/obj
/*/bin
проблема в том, что они уже находятся в удаленном, и когда они меняются, они появляются как измененные и загрязняют измененный список файлов.
чтобы перестать их видеть, Вам нужно удалить всю папку с пульта ДУ хранилище.
в командной строке:
- CD в папку РЕПО (т. е.
C:\repos\MyRepo
) - Я хочу удалить SSIS\obj. Кажется, вы можете удалить только на верхнем уровне, поэтому теперь вам нужно CD в SSIS: (т. е.
C:\repos\MyRepo\SSIS
) - теперь введите магическое заклинание
git rm -r -f obj
- rm=удалить
- - r = рекурсивно удалить
- -f = означает силу, потому что вы действительно имеете в виду это
- obj является папка
- теперь бегите
git commit -m "remove obj folder"
я получил тревожное сообщение:13 файлов изменено 315222 удаления
затем, потому что я не хотел искать строку CMD, я вошел в Visual Sstudio и сделал синхронизацию, чтобы применить ее к удаленному
после удаления файла из РЕПО с помощью git rm
можно использовать BFG Repo-Cleaner чтобы полностью и легко уничтожить файл из истории РЕПО.
Incase если вы не файл в локальном РЕПО, но в Git РЕПО, а затем просто открыть файл в Git РЕПО через веб-интерфейс и найти кнопку Удалить в правом углу в интерфейсе. Нажмите здесь, чтобы просмотреть опцию удаления интерфейса