как удалить большой файл 2 git обратно?

По сути, я хочу откатить две фиксации в своем локальном репо. На удалёнку ещё ничего не передавалось.

Итак, в моем репозитории GIT я случайно добавил огромный zip-файл в коммит (A). Я понял это, удалил zip-файл с помощью Finder и сделал еще один коммит (B).

Но теперь я понимаю, что если бы я отправил это на удаленный компьютер, он бы включал весь этот zip-файл...

И чтобы все усложнить, у меня также была куча важных изменений в нескольких файлах в первом коммите (A), которые я не хочу потерять.

Как удалить этот zip-файл из истории перед отправкой на удаленный компьютер? Могу ли я вернуться к состоянию моих файлов до этих двух коммитов без потери всех изменений, сделанных в нескольких других файлах?


person Matt Welander    schedule 31.03.2016    source источник


Ответы (2)


Самый простой способ исправить это — использовать команду git reset <commit>.

В вашем случае, поскольку вы хотите отменить две фиксации, вы можете сделать:

git reset HEAD~2

От git help reset :

git сбросить [<mode>] [<commit>]

--mixed Сбрасывает индекс, но не рабочее дерево (т. е. измененные файлы сохраняются, но не помечаются для фиксации) и сообщает, что не было обновлено. Это действие по умолчанию.

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

Затем вы можете выбрать, какие файлы вы хотите зафиксировать, как обычно.

person edi9999    schedule 31.03.2016

Ссылка: Как переместить HEAD/вернуть изменения

Прочтите приведенную выше ссылку для получения полной информации.

Ты можешь использовать :


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

введите здесь описание изображения


Другие варианты:

How to remove big files from the repository

Вы можете использовать git filter-branch или BFG. https://rtyley.github.io/bfg-repo-cleaner/

BFG Repo-Cleaner

альтернатива git-filter-branch.

BFG — это более простая и быстрая альтернатива git-filter-branch для удаления плохих данных из истории репозитория Git:

* Удаление безумно больших файлов*
* Удаление паролей, учетных данных и других личных данных

Примеры (с официального сайта)

Во всех этих примерах bfg является псевдонимом для java -jar bfg.jar.

# Delete all files named 'id_rsa' or 'id_dsa' :
bfg --delete-files id_{dsa,rsa}  my-repo.git
person CodeWizard    schedule 31.03.2016