Как удалить файл из репозитория git?
я добавил файл с именем "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 для поддержания контроля версий для веб-сайта моего бизнеса, но каталог "Микки" был папкой 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 для меня. Элемент книга"Pro Git" онлайн и мне очень помогает.
Если ваш файл уже находится на GitHub,вы сейчас (июль 2013) можете непосредственно удалить его из веб-интерфейса!
просто просмотрите любой файл в своем репозитории, нажмите значок корзины вверху и зафиксируйте удаление, как и любое другое веб-редактирование.
(фиксация будет отражать удаление этого файла):
и просто так, он ушел.
для помощи с этими функциями, не забудьте прочитать наши статьи справки на создание,двигаясь,переименовать и удаление файлы.
Примечание: так как это система управления версиями, Git всегда имеет вашу спину, если вам нужно восстановить файл позже.
последнее предложение означает, что удаленный файл все еще является частью истории, и вы можете восстановить его достаточно легко (но еще не через веб-сайт GitHub интерфейс):
в разделе "восстановить удаленный файл в Git repo".
Это единственный вариант, который работал для меня.
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, remotes, тегах и т. д.
если вы хотите полностью уничтожить его в один шаг, я рекомендую вам использовать
git forget-blob
это легко, просто сделать
git forget-blob file1.txt
.это удалит все ссылки, do
git filter-branch
, и, наконец, запустите сборщик мусора gitgit gc
чтобы полностью избавиться от этого файла в репозитории.
другой способ, если вы хотите удалить файл из локальной папки с помощью команды rm, а затем нажмите изменения на удаленный сервер.
rm file1.txt git commit -a -m "Deleting files" git push origin master
для удаления конкретного файла
git rm filename
чтобы очистить все неотслеженные файлы из каталога рекурсивно в одном кадре
git clean-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 File-Name
или удалить файлы только из локального репозитория, но из файловой системы
git rm --cached File-Name
во-вторых, зафиксировать изменения в локальном репозитории.
git commit -m "unwanted files or some inline comments"
наконец, обновите / нажмите локальные изменения в удаленном репозитории.
git push
Я пробовал много предложенных вариантов, и ни один из них не работал (я не буду перечислять различные проблемы). То, что я в конечном итоге сделал, что сработало, было простым и интуитивно понятным (для меня):
- переместить все локальное РЕПО в другое место
- клонировать РЕПО снова от мастера к локальному диску
- скопируйте файлы / папки из исходной копии в #1 обратно в новый клон из #2
- убедитесь, что проблема большого файла либо нет или исключен в составе .gitignore file
- сделайте обычный 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=удалить
- -Р = рекурсивно удалить
- - f = означает силу, потому что вы действительно имеете в виду это
- obj является папка
- теперь бегите
git commit -m "remove obj folder"
я получил тревожное сообщение:13 файлов изменены 315222 удаления
затем, поскольку я не хотел искать строку CMD, я вошел в Visual Sstudio и сделал синхронизацию, чтобы применить ее к удаленному
после удаления файла из РЕПО с помощью
git rm
можно использовать BFG Repo-Cleaner полностью и легко стереть файл из истории РЕПО.
Если вы не храните файл в своем локальном РЕПО, но в Git repo, то просто откройте файл в Git repo через веб-интерфейс и найдите кнопку удаления в правом углу интерфейса. Нажмите здесь, чтобы просмотреть опцию удаления интерфейса