Удалить ссылки на физически удаленные файлы из удаленного репозитория Git - PullRequest
9 голосов
/ 28 марта 2011

Я физически удалил много файлов из моего Git-репозитория (из многих разных каталогов).

Я все еще могу видеть их ссылку, и если я сделаю коммит на GitHub, старые файлы все еще там.

Мне нужно удалить эти ссылки с удаленного сервера репо (GitHub), а также с моего локального ПК.

Как удалить эти ссылки из репозиториев?

Ответы [ 4 ]

17 голосов
/ 28 марта 2011

Вам нужно создать «commit» (терминология git для новой версии), в котором эти файлы будут удалены, а затем отправить его в GitHub. Я предполагаю, что если вы введете git status, вы увидите что-то вроде этого:

# On branch master
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    old-file.txt
#   deleted:    another-old-file.txt
#   deleted:    unneeded.c

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

git add -u
git commit -m "Delete many old files"

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

Однако, если в этом выводе перечислены другие изменения, было бы лучше попробовать что-то более точное, например, предложенное здесь:

В будущем лучше всего удалять файлы с git rm, во-первых:)

4 голосов
/ 28 марта 2011

Если вы хотите удалить файл из всех коммитов репозитория, вам нужно git filter-branch.Примеры его использования можно найти по всему Интернету, например, на GitHub .

2 голосов
/ 29 марта 2011

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

git rm filename

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

git commit -m "Remove files" #everything staged will be committed

Кстати, то же самое верно, когда вы хотите переместить или переименовать файлы.Не делайте этого с помощью команды shell move, а используйте «git mv [source] [destination]»

Теперь, если вы удалили их без использования «git rm»

, вам нужно поставитьсначала их:

git add -u
git commit -m "Remove files"

Теперь, если вы хотите, чтобы они исчезли из всей истории, поэтому никаких упоминаний об этих файлах не будет, тогда вы должны использовать

git filter-branch 

Документация по ветке фильтра Git

Обратите внимание, что в большинстве случаев вам не нужно использовать команду filter-branch, поскольку это довольно сложный процесс.Лучший пример использования - если вы передали файл с важной информацией, такой как номер вашей кредитной карты и срок действия, и отправили этот файл в общедоступное хранилище.В этом случае изменение этого значения на какое-то не относящееся к делу значение или удаление файла недостаточно - вы должны использовать ветвь фильтра;) ... И молиться, чтобы никто не был достаточно быстр, чтобы извлечь из вашего репозитория;) ... А затем сообщить свойкредитная карта все равно украдена ...;)

0 голосов
/ 28 марта 2011

Они должны отображаться в вашем индексе как удаленные. Просто установите их, и они будут удалены.

Используйте git add -i, чтобы ускорить процесс подготовки.

...