Удалить 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

Другие вопросы по тегам