Удалить Accedental Git Commit
Я использую приложение git для управления большой коллекцией видеофайлов. Вместо того, чтобы печатать,
git annex add .
Мне удалось,
git add .
Теперь я закончил с огромным репо. Как я могу удалить файлы из git (уже помещенные в другие 4 репозитория) и добавить их в приложении. Мне также нужно удалить их из каталога.git и повторно добавить их, используя приложение git?
2 ответа
Я читаю этот ответ где-то в Интернете, написанный пользователем Rhubarb
Тебе нужно:
git rm --cached <added_file_to_undo>
так как:
Когда я был новым, я впервые попробовал
git reset .
(чтобы отменить все мои начальные добавления), только чтобы получить это (не очень) полезное сообщение:
fatal: Failed to resolve 'HEAD' as a valid ref.
Оказывается, это потому, что ссылка HEAD (ветвь?) Существует только после первого коммита. То есть, вы столкнетесь с той же проблемой новичка, что и я, если ваш рабочий процесс, как у меня, будет выглядеть примерно так:
Перейдите в мой новый каталог проектов, чтобы опробовать Git, новую горячность
git init
git add .
git status
... много дерьмовых свитков...
=> Черт, я не хотел добавлять все это.
google "undo git add"
=> найти переполнение стека - ууу
git reset .
=> fatal: Не удалось разрешить 'HEAD' в качестве действительного ссылки.
Кроме того, выясняется, что в списке рассылки зарегистрировано сообщение об ошибке.
И что правильное решение было прямо там, в выводе статуса Git (который, да, я назвал "дерьмом")
...
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
...
И решение действительно заключается в использовании git rm --cached FILE.
Обратите внимание на предупреждения в другом месте здесь - git rm удаляет вашу локальную рабочую копию файла, но не если вы используете --cached. Вот результат git help rm:
--cached Используйте эту опцию, чтобы удалять и удалять пути только из индекса. Файлы рабочего дерева, модифицированные или нет, останутся.
Я приступаю к использованию
git rm --cached
, удалить все и начать заново. Не сработало, потому что, хотя добавить. является рекурсивным, оказывается, что rm нуждается в -r для рекурсии. Вздох.
git rm -r --cached
, Хорошо, теперь я вернулся к тому, с чего начал. В следующий раз я собираюсь использовать -n, чтобы выполнить пробный прогон и посмотреть, что будет добавлено:
git add -n .
Я заархивировал все в безопасное место, прежде чем доверять git help rm о том, что --cached ничего не уничтожает (и что, если я его неправильно написал).
Вы можете удалить файлы из вашего репозитория git, не удаляя их с диска, используя rm
с --cached
флаг:
git rm --cached file.zip
Вы также можете удалить целые папки:
git rm -r --cached folder