Вопрос: Как удалить файл из git repo?


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

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


1271


источник


Ответы:


использование 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  

2138



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 разделяет пару отличных ресурсов: Эта страница имеет графику, которая помогает демистифицировать Git для меня. Книга "Pro Git" онлайн и помогает мне много.


544



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

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

delete button

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

commit a deletion

И просто так, все прошло.

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

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

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

Видеть " Восстановить удаленный файл в репозитории Git ».


53



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

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

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


39



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

git rm -r foldername

23



В более общем смысле, 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

22



If you want to delete the file from the repo, but leave it in the the file system (will be untracked):

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

If you want to delete the file from the repo and from the file system then there are two options:

  1. If the file has no changes staged in the index:

    bykov@gitserver:~/temp> git rm file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
  2. If the file has changes staged in the index:

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

10



git rm will only remove the file on this branch from now on, but it remains in history and git will remember it.

The right way to do it is with git filter-branch, as others have mentioned here. It will rewrite every commit in the history of the branch to delete that file.

But, even after doing that, git can remember it because there can be references to it in reflog, remotes, tags and such.

If you want to completely obliterate it in one step, I recommend you to use git forget-blob

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

It is easy, just do git forget-blob file1.txt.

This will remove every reference, do git filter-branch, and finally run the git garbage collector git gc to completely get rid of this file in your repo.


10



Another way if you want to delete the file from your local folder using rm command and then push the changes to the remote server.

rm file1.txt

git commit -a -m "Deleting files"

git push origin master

7



If you have the GitHub for Windows application, you can delete a file in 5 easy steps:

  • Click Sync.
  • Click on the directory where the file is located and select your latest version of the file.
  • Click on tools and select "Open a shell here."
  • In the shell, type: "rm {filename}" and hit enter.
  • Commit the change and resync.

5