Как удалить файл из индекса в git?

Как удалить файл из индекса git

Как удалить файл из index репозитория git, не удаляя файл из рабочего дерева?

Если бы у меня был файл , который отслеживался git, я мог запустить . Но это удалило бы файл. Я бы предпочел, чтобы git просто прекратил отслеживать файл.

Вы можете просто использовать . Это сохранит файл, но удалит его из индекса.

3

для удаления определенного файла.

и для удаления всех файлов из индекса git.

Улучшить этот ответ

отредактировал 31 июля ’18 в 9:41

Джефф Шаллер
57.6k1212 золотых знаков8888 серебряных знаков200200 бронзовых знаков

ответ дан 31 июля ’18 в 11: 27

добавить комментарий |

для удаления определенного файла.

и для удаления всех файлов из индекса git.

Переписывание истории требует ручного вмешательства в любом случае…

Если содержание хранилища в репозитории недопустимо, вы, вероятно, захотите полностью удалить его из истории с помощью чего-то вроде .
Это равносильно переписыванию истории, что потребует ручного вмешательства для каждой ветви /репозитория (см. Раздел «Восстановление из исходной базы данных» в man-страница git rebase ).
Специальная обработка, требуемая для вашего файла конфигурации, будет просто еще одним шагом, который нужно выполнить при восстановлении после перезаписи:

  1. Сохраните копию файла конфигурации.
  2. Восстановить после переписывания.
  3. Восстановите файл конфигурации.

Что если файлы из gitignore уже добавлены в репозиторий

Обратите внимание, что если файлы уже добавлены в git репозиторий, то добавление их в не удалит эти файлы. Изменения в них будут продолжать отслеживаться и входить в коммиты, несмотря на то, что они есть в

Нам придется вручную их удалить из репозитория.

Очень удобная команда bash, которая удалит из git репозитория те файлы, которые содержатся в файлах :

git rm --cached `git ls-files -i --exclude-from=.gitignore`

То же самое для Powershell

foreach ($i in iex 'git ls-files -i --exclude-from=.gitignore') { git rm --cached $i }

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

Либо можно удалять файлы вручную, таким образом:

git rm --cached path/to/file

Либо если нам нужно удалить целую директорию из git, то воспользуемся следующей командой:

git rm  -r --cached path/to/directory

Либо так мы могли бы удалить все файлы с расширением .log в папке log:

git rm --cached log/\*.log

Параметр означает, что файлы будут удалены только из раздела «проиндексированных файлов».
На диске (рабочем каталоге) они останутся нетронутыми.

11 ответов

Лучший ответ

Из man-файла:

Итак, для одного файла:

И для одного каталога:

4728

Sam
8 Июл 2019 в 09:00

Чтобы удалить всю папку из репозитория (например, файлы Resharper), сделайте следующее:

Я зафиксировал некоторые файлы resharper и не хотел, чтобы они оставались для других пользователей проекта.

297

konsolenfreddy
2 Окт 2012 в 09:25

Согласно моему ответу здесь: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in- мой-github-репозиторий

Действия по удалению каталога

Действия по игнорированию этой папки при следующих фиксациях

Файл .gitignore будет выглядеть так

109

Community
20 Июн 2020 в 09:12

Более общее решение:

  1. Отредактируйте файл .

  2. Удалить все элементы из индекса.

  3. Восстановить index.

  4. Сделать новую фиксацию

74

Math Bob
2 Июл 2020 в 12:49

Кроме того, если вы передали конфиденциальные данные (например, файл, содержащий пароли), вы должны полностью удалить их из истории репозитория. Вот руководство, объясняющее, как это сделать: http://help.github.com/remove-sensitive-data/

73

BoD
21 Авг 2011 в 12:16

(Из https://help.github.com/articles/ignoring-files)

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

26

Rystraum
28 Янв 2014 в 11:46

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

24

Afraz Ahmad
21 Янв 2021 в 06:58

Вышеуказанные ответы не сработали для меня. Я использовал для удаления всех зафиксированных файлов.

Удалите файл из репозитория git с помощью:

Удалите папку из репозитория git с помощью:

Это удаляет каталог или файл из всех коммитов.

Вы можете указать фиксацию, используя:

Или диапазон:

Чтобы отправить все на удаленный компьютер, вы можете:

8

Samuel Philipp
20 Фев 2019 в 03:48

Это зависит от того, что вы подразумеваете под словом «удалить» из git. :)

Вы можете отключить файл с помощью git rm —cached подробнее см.. Когда вы что-то отключаете, это означает, что это больше не отслеживается, но это не удаляет файл из предыдущих коммитов.

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

Dharman
15 Ноя 2020 в 18:20

Игнорируйте файлы, удалите файлы из git, обновите git (для удаления).

Примечание. Это не касается истории конфиденциальной информации.

Этот процесс определенно требует понимания того, что происходит с git. Со временем, получив это, я научился выполнять такие процессы, как:

1) Игнорируйте файлы

  • Добавьте или обновите проект , чтобы игнорировать их — во многих случаях, таких как ваш, родительский каталог, например будет используемым регулярным выражением.
  • зафиксировать и нажать на изменение файла (не уверен, нужен ли push, помните, ничего страшного, если это будет сделано).

2) Удалите файлы из git (только).

3) Добавьте и зафиксируйте это изменение (по сути, это изменение для «добавления» удаления материала, несмотря на запутанную команду «добавить»!)

Команда git add

Команда commit отправляет файлы в локальный репозиторий.

Однако перед выполнением команды commit надо подготовить файлы — составить список тех из них, которые будут отправлены в репозиторий. Команда git add позволяет это сделать — добавляет файлы и папки в индекс (область staging area). В GIT есть понятие staged files — это файлы, которые попадут в следующий снимок при выполнении команды commit.

Дело в том, что в параметрах commit не указывается, какие файлы включать в снимок. Это делается заранее в команде add, а в команде commit пишется просто комментарий и в репозиторий отправляются все подготовленные файлы из индекса (staging area).

Можно добавлять в индекс как файлы, так и папки. Например, эта команда подготовит для будущего снимка папку <имя_папки1> и файл <имя_файла1>:

git add <имя_файла1> <имя_папки1>

При этом все остальные файлы, даже если они отслеживаются в репозитории (tracked files) и были отредактированы (edited files), в следующий снимок не попадут.

Есть удобные вариации команды add:

git add -A добавляет все файлы (вновь созданные, измененные и удаленные)
git add . добавляет вновь созданные и измененные файлы, но не удаленные
git add -u добавляет измененные и удаленные, но не вновь созданные

Нетрудно заметить, что команда:

git add -A

эквивалентна двум поочередно выполненным командам:

git add .
git add -u

Удаление файлов из репозитория и с диска

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

Если речь идет об отдельном файле, то команда:

git rm <имя_файла>

добавляет файл <имя_файла> в индекс как удаленный. При этом файл удаляется и с диска, если еще не был удален оттуда.

А команда:

git add -u

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

Удаление файлов только из репозитория

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

А на диске они должны оставаться. Чтобы добавить этот лог в индекс как удаленный, но оставить его при этом на диске, выполним команду:

git rm --cached mylogfile.log

То же самое для папки делается так:

git rm --cached -r mydirectory

add и commit одной строкой

Бывает удобным отправлять файлы в репозиторий побыстрее, не выполняя по очереди add и commit. Можно выполнить эти команды и вместе:

git commit -a -m "комментарий"

Вышеприведенная команда — это то же самое, что выполненные по очереди команды:

git add .
git commit -m "комментарий"

Кратко это звучит как «добавь в индекс все измененные файлы и сделай снимок с указанным комментарием».

Обратите внимание, что удаленные файлы затронуты не будут. Но можно создать в конфигурации любую команду из комбинации add и commit (правда, это редко используется):

Но можно создать в конфигурации любую команду из комбинации add и commit (правда, это редко используется):

git config --global alias.add-commit '!git add -A && git commit'

Мы создали команду add-commit. И с помощью нее можем выполнять действия:

git add-commit -m 'комментарий'

Команда git rm -f

В предыдущем разделе я рассмотрел вариант, когда созданный и проиндексированный файл удаляется из области индексирования “Staging Area”, но остается в области “Working Directory”. Выполняется это с помощью команды .

Логическим продолжением этой команды является та же самая команда , но с ключом — . Такая команда удаляет проиндексированный (но еще не зафиксированный) файл как из области “Staging Area”, так и из области “Working Directory”.

Давайте рассмотрим на примере созданного и проиндексированного файла его удаление с помощью команды :

Файл удален как из области “Staging Area”, так и из области “Working Directory”. В итоге можно сказать, что между командой и командой практически нет никакой разницы.

Статьи по теме тега: «git rm —cached»

http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>style=»padding-top:6px;padding-bottom:6px;»>

Добавьте файл .gitignore в Project Project и как изменить файл .gitignore и вступите в силу. Развитие трепетания проекта, как правило, осуществляется с собственным развитием, а простое развитие трепет…

Предисловие: Сегодня отправьте код, найдите модуль в модуле SpringCloud, нет реального коммита, логин Gitlab, щелкните, никакой подачу кода, один чек — это подмодуль управления подмодулем, это то, что…

Я назвал»file1.txt»Файлы добавляются в репозиторий Git. После этого я отправил его и добавил несколько именdir1с участиемdir2И отправьте их в репозиторий Git. Теперь в текущем репозитории&qu…

При удалении папки проекта Git, вам нужно повторить Y / да, люди обеспокоены! Ну так что ты делаешь? DONE…

Git rm git rm используется для удаления файлов в промежуточной области или рабочей директории Пример: удалите файлы, которые вы не хотите отслеживать Git Collection Git tag Git log Git reset Git cherr…

Создание пустой ветки является наиболее критическойgit rm -rf .Команда, текущая версия этого издания Это более громоздкое и позже оптимизировано. 1, пройтиgit checkout —orphan1.1.x Команда Создайте л…

1. добавить файлы Добавьте файл test.txt. Подано в постановочную площадь. Отправить в хранилище. 2. Удалить файлы Удалить файл test.txt. Удалить файл из хранилища. Отправить на удаление.  …

1. Ниже приведен пример: Предположим, что данные для проверки A = 1101, проверочный полином B = 0000 0111, текущее значение CRC проверки CRC = 1011 1001, Шаг 0: CRC = 1011 1001 и XOR данных A влево на…

rm грамматика: Параметры: операционная:…

Мое первоначальное представление содержит несколько файлов журналов. у меня есть*logДобавить в мой.gitignore А теперь я хочу удалить файлы журнала из своего репозитория. Файл будет удален из репозитор…

мерзкие состояния git status (1) Файлы в зоне временного хранения Выделенный синим цветом, вы можете использовать команду «получить сброс HEAD», чтобы удалить его из области подготовки (2)…

Источник проблемы При создании проекта используя Maven, выполните компиляцию или упаковку и отчет о ошибках. was cached in the local repository, resolution will not be reattempted until the update int…

1. Скачайте и установите safe-rm: yum -y install wget wget https://launchpadlibrarian.net/188958703/safe-rm-0.12.tar.gz tar xf safe-rm-0.12.tar.gz mv safe-rm-0.12 /usr/local/safe-rm cd /usr/local/safe…

Это мой оригинальный личный опыт, если есть ошибки, пожалуйста, сообщите Доступен дополнительный контентмой блог Предисловие Один из серверов компании создает слишком много временных файлов. Когда мои…

1. Введение Команда Linux rm используется для удаления файлов или папок. 2. Синтаксис и параметры грамматика: параметр: Три общих примера Удалите папку и все файлы ниже Удалить все файлы в текущем кат…

Команда git rm

Для удаления файлов в системе Git, как уже упоминалось выше, имеется специальная команда . Ее отличие от обычной консольной команды (в том же Linux) заключается в особенности самой системы Git.

Как хорошо известно, в системе Git файл может одновременно существовать в трех ипостасях: в области “Working Directory”, в области “Staging Area”, в области “Repository”. Удаление файла из области “Working Directory” не приведет к его удалению из областей “Staging Area” и “Repository”.

Поэтому, чтобы удалить файл, нужно (в идеале) выполнить три команды подряд для удаления файла из Рабочей области “Working Directory”, затем из области индекса “Staging Area” и потом из области репозитория “Repository”:

Команда является ни чем иным, как “вшитым” в Git сокращением двух первых команд:

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

Удалим его командой :

Видим, что файл был сразу удален из двух областей: рабочего каталога “Working Directory” и области индексации “Staging Area”. Но в репозитории файл все же остался, о чем говорит вывод команды .

Любой последующий commit зафиксирует удаление этого файла:

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

Если они уже извлекли ваш коммит удаления, они все равно могут восстановить предыдущую версию файла с помощью git show :

Или с git checkout (за комментарий Уильяма Перселл, но не забудь снова удалить его из индекса!):

Если они предприняли другие действия после извлечения вашего удаления (или они вытягивают с rebase в отдельную ГОЛОВКУ), им может понадобиться что-то кроме . Они могут использовать , чтобы найти коммит незадолго до того, как получат ваше удаление.

В комментарии вы упоминаете, что файл, который вы хотите «отследить, но сохранить», является своего рода файлом конфигурации, который необходим для запуска программного обеспечения (непосредственно из хранилища).

Где должен находиться этот файл

Файл может находиться в корне проекта или любом подкаталоге.

Либо можно задать глобальный файл gitignore, таким образом:

$ git config --global core.excludesfile ~/.gitignore_global

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

Примеры содержимого файла

# строки начинающиеся на # - это комментарии, они не учитываются

# Исключить все файлы с расширение .a
*.a

# Но отслеживать файл lib.a даже если он подпадает под исключение выше
!lib.a

# Исключить файл TODO в корневом каталоге, но не файл в subdir/TODO
/TODO

# Игнорировать все файлы в каталоге build/
build/

# Игнорировать файл doc/notes.txt, но не файл doc/server/arch.txt
doc/*.txt

# Игнорировать все .txt файлы в каталоге doc/
doc/**/*.txt

git-filter-branch

Начать пожалуй стоит с , так как эта утилита является частью git и не требует установки.

Переходим в директорию с нужным проектом:

cd {GIT_PROJECT_LOCATION}

Первое что нужно сделать — это убедится, что у нас самая последняя версия репозитория и нет никаких локальных изменений.

bash:~$ git status
On branch master
nothing to commit, working directory clean
bash:~$ git pull origin master
From bitbucket.org:bosha/test-repo
 * branch            master     -> FETCH_HEAD
Already up-to-date.
bash:~$

Предположим, что мы случайно закомитили в репозиторий файл в котором у нас храниться пароль к базе данных. Проект в активной разработке и испольуется тестовая база данных, но по привычке пароль использовали такой же какой для входа в систему или ещё куда либо. Знакомая ситуация? :)

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

bash:~$ git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch .environment' \
--prune-empty --tag-name-filter cat -- --all
Rewrite d402133542d0f0f1578e916b8a350842cc955870 (4/4) (0 seconds passed, remaining 0 predicted)    rm '.environment'

Ref 'refs/heads/master' was rewritten
Ref 'refs/remotes/origin/master' was rewritten

В результате выполнения этой команды, в каждом коммите репозитория будет удален файл . Если необходимо удалить директорию, то к необходимо добавить ключ :

bash:~$ git filter-branch --force --index-filter \
'git rm -f --cached --ignore-unmatch {DIRETORY_TO_REMOVE}/' \
--prune-empty --tag-name-filter cat -- --all

Если есть ещё файлы которые необходимо удалить — выполняете эту команду для каждого из них.

Важно: дабы избежать повторения этой неприятной ситуации, файл необходимо добавить в :

echo ".environment" >> .gitignore
git add .gitignore
git commit -m '.environment was added to .gitignore'

Теперь закомитим все наши изменения:

git push origin --force --all

Если использовали теги:

git push origin --force --tags

Для чего нужен .gitignore

Файл .gitignore используется для того, чтобы определить, какие файлы и папки не нужно добавлять в git репозиторий.

Мы конечно могли бы вручную добавлять нужные файлы в репозиторий, например так:

git add path/to/file

Однако это было бы очень трудоемко. Гораздо проще использовать команду:

git add .

Которая добавит все файлы в каталоге проекта.

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

Тут нам и нужен .gitignore. Вам нужно его самим создать и разместить в корне проекта либо нужной подпапке.

8 ответов

Лучший ответ

Как говорит Дифур, ваша ситуация мало чем отличается от ситуации в Измените URI (URL) удаленного репозитория Git. Когда вы репозиторий, он добавляется как ваш под именем . Что вам нужно сделать сейчас (поскольку вы больше не используете старый источник), так это изменить URL-адрес :

Если исходный репозиторий будет часто обновляться, и вы хотите получать эти обновления время от времени, то вместо редактирования было бы лучше добавить новый :

Или, может быть, даже назовите старую :

Затем, когда вы захотите получить изменения из , вы можете:

Поскольку этот источник является образцом репозитория (кажется, своего рода шаблоном для начала), я не думаю, что его нужно хранить или разветвлять вообще — здесь я выберу первую альтернативу.

131

Community
23 Май 2017 в 11:54

GitHub: чужой репозиторий и ваш собственный репозиторий

Я буду называть чужой репозиторий другим репозиторием .

  1. Создайте новый репозиторий на github.com. (это ваш репозиторий )

    • Дайте ему то же имя, что и другой репозиторий .
    • Не инициализируйте его с помощью README, .gitignore или лицензии.
  2. Клонируйте другой репозиторий на свой локальный компьютер. (если вы еще этого не сделали)

    git clone https://github.com/other-account/other-repository.git

  3. Переименуйте текущий локальный репозиторий » origin » в » upstream «.

    git remote rename origin upstream

  4. Дайте локальному репозиторию » origin «, который указывает на ваш репозиторий .

    git remote add origin https://github.com/your-account/your-repository.git

  5. Переместите локальный репозиторий в ваш репозиторий на github.

Теперь ‘ origin ‘ указывает на ваш репозиторий , а ‘ upstream ‘ указывает на другой репозиторий .

  • Создайте новую ветку для ваших изменений с .
  • Вы можете как обычно в свой репозиторий .
  • Используйте , чтобы перенести изменения из другого репозитория в вашу главную ветку.

64

Derek Soike
19 Мар 2018 в 16:52

Идея состоит в том, чтобы удалить и повторно инициализировать.

  1. перейдите в свою клонированную папку репо rm -rf .git
  2. повторно инициализируйте его, а затем добавьте свой пульт и сделайте первое нажатие.

13

MAOXU
14 Дек 2017 в 04:32

Вы можете сделать это, создав новый пульт из вашего локального репозитория (через командную строку).

Тогда вы можете позвонить:

Чтобы заменить установленный по умолчанию пульт «origin», вы можете запустить следующее:

8

bmorgan21
13 Авг 2013 в 03:50

Я думаю, что «самый вежливый способ» сделать это:

  1. Разветвите исходное репо в своей учетной записи GitHub
  2. Проверьте новую ветку для ваших изменений (на случай, если вы не сделали этого раньше)
  3. Добавьте новый пульт для вашего локального репозитория:
  4. Отправьте свою новую красивую ветку в репозиторий github:

Таким образом, у вас будет репо, разветвленное на исходное, а ваши изменения будут внесены в отдельную ветку. Это будет проще, если вы хотите отправить запрос на перенос в исходное репо.

7

llekn
3 Апр 2017 в 18:19

Взято из Git перемещает все в новое происхождение

В основном вам нужно связать новое репо с вашей папкой

1

Community
23 Май 2017 в 12:10

У меня была аналогичная ситуация, но в моем случае мне просто нужно было сделать, как предлагалось, но с https , например:

1

T J
25 Мар 2016 в 06:12

После клонирования скопируйте файлы из их папки в новую и начните заново с помощью git init,

У меня была аналогичная проблема, и мне пришлось изменить каталог папки, прежде чем я смог внести изменения в свое репо.

Или вы можете удалить текущий источник репозитория с помощью команды git remote remove origin.

1

F. X. Blankson
16 Авг 2020 в 17:23

Команда Git Remove

Команда git rm удаляет отслеживаемые изменения из промежуточной области. Это говорит Git, что обновления, которые были перенесены на промежуточную стадию ранее с помощью команды git add, не готовы к фиксации. Поэтому при выполнении этой команды git просто удаляет изменения из промежуточного состояния. Но изменения все еще существуют в локальном репозитории. Если вы внимательно посмотрите на выходные данные приведенного выше изображения раздела 1. В этом git дает пользователю предложение о том, что отслеживаемый файл на промежуточной стадии может быть удален с помощью git rm — —

cached <file>.

Чтобы практиковать эту команду, давайте попробуем удалить тот же CustomerData_IND.txt, который был добавлен ранее.

1) чтобы удалить нужный файл, введите git rm — -cached CustomerData_IND.txt. Кроме того, используйте команду git status для проверки состояния репозитория.

Untracked files: CustomerData_IND.txt файл вернулся к списку игнорируемых изменения.

Удаление файлов из git репозитория и из stage

Удаление файла из stage

Вначале разберемся со stage. Создадим ещё один файл.

> touch main.c

“Отправим” файл main.c в stage.

> git add main.c

Внесем изменения в README.md.

> echo "# README" > README.md

Информацию об этом также отправим в stage.

> git add README.md

Посмотрим на состояние stage.

> git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   README.md
        new file:   main.c

Если нам необходимо убрать из stage, какой-то из этих файлов (main.c или README.md), то для этого можно воспользоваться командой git –rm cashed <filename>, сделаем это для файла main.c.

> git rm --cached main.c
rm 'main.c'

Теперь посмотрим на состояние рабочей директории и stage.

> git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   README.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        main.c

Видно, что изменения в файле README.md готовы для коммита, а вот файл main.c перешел в состояние – неотслеживаемый. Отправим main.c в stage и, после этого, сделаем коммит в репозиторий.

> git add main.c
> git commit -m "add main.c and do some changes in README.md"
 add main.c and do some changes in README.md
 2 files changed, 1 insertion(+)
 create mode 100644 main.c

Удаление файлов из git репозитория

Удалить файл из репозитория можно двумя способами: первый – удалить его из рабочей директории и уведомить об этом git; второй – воспользоваться средствами git. Начнем с первого способа. Для начала посмотрим, какие файлы у нас хранятся в репозитории.

> git ls-tree master
100644 blob 7e59600739c96546163833214c36459e324bad0a    README.md
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    main.c

Удалим файл main.c из рабочей директории.

> rm main.c
> ls
README.md

Уведомим об этом систему git.

> git rm main.c
rm 'main.c'

Вместо команды git rm можно использовать git add, но само слово add в данном случае будет звучать несколько неоднозначно, поэтому лучше использовать rm. На данном этапе еще можно вернуть все назад с помощью команды git checkout — <filename>, в результате, в нашу рабочую директорию будет скопирован файл из репозитория. Создадим коммит, фиксирующий удаление файла.

> git commit -m "remove main.c"
 remove main.c
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 main.c

Теперь в репозитории остался только один файл README.md.

> git ls-tree master
100644 blob 7e59600739c96546163833214c36459e324bad0a    README.md

Второй способ – это сразу использовать команду git rm без предварительного удаления файла из директории. Вновь создадим файл main.c и добавим его в репозиторий.

> touch main.c
> git add main.c
> git commit -m "add main.c file"
 add main.c file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 main.c
> git ls-tree master
100644 blob 7e59600739c96546163833214c36459e324bad0a    README.md
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    main.c

Удалим файл из репозитория.

> git rm main.c
rm 'main.c'

> git commit -m "deleted: main.c file"
 deleted: main.c file
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 main.c

Файла main.c больше нет в репозитории.

> git ls-tree master
100644 blob 7e59600739c96546163833214c36459e324bad0a    README.md

Его также нет и в рабочем каталоге.

> ls
README.md

Удалите файл README.md из репозитория самостоятельно.

Выводы

Несмотря на то, что файл и возможно удалить после случайного коммита, этого следует избегать. Есть несколько простых вещей которые стоит избегать, и наоборот использовать:

  • Использовать программы с графическим интерфейсом для работы git. Они наглядно показывают какие файлы будут добавлены в коммит. Во всех средах разработки как правило есть либо дополнения, либо встроенные средства для работы с git которые помогают избежать таких ошибок. Если среда разработки которую вы используете не имеет средств работы с git, то есть графические интерефейсы. Я когда-то писал небольшой обзор графических интерфейсов для git;
  • Избегать таких опасных команд как , и . Вместо них добавлять отдельные файлы с ;
  • Использовать чтобы интерактивно просматривать и добавлять файлы;
  • Перед добавлением файлов внимательно просматривать какие файлы были изменены и могут попасть в коммит .

Полезные ссылки:

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: