Отменить git add, commit и push БЕЗ потери неотслеживаемых файлов

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

С тех пор я также сделал еще два коммита, один из которых сливался с удаленным через git pull.

Я хочу отменить эту последовательность действий и восстановить мой каталог в прежнее состояние (ВКЛЮЧАЯ неотслеживаемые файлы).

Со всеми командами, которые я пробовал (checkout, revert, reset, rebase), мои неотслеживаемые файлы теряются в результате отмены коммитов.

Что я должен делать?


person capybaralet    schedule 19.02.2015    source источник


Ответы (1)


1. git log
2. copy hash of the commit that you accidentally pushed
3. git revert HEAD
4. git push
5. git cherry-pick HASHFROMSTEPTWO

Это отменит ваши изменения и отправит их вашему мастеру, чтобы другим людям больше не приходилось видеть ваши файлы. Шаг 5 затем вернет все файлы и изменения, которые вы сделали в исходной фиксации, и добавит их поверх возврата.

person aashnisshah    schedule 19.02.2015
comment
Единственное, что я бы добавил: git cherry-pick -n commitid Потому что я думаю, что он не хочет снова делать ту же фиксацию - person Jan; 20.02.2015
comment
У меня есть несколько коммитов, включая слияние, которое я хочу отменить. Я предполагаю, что git revert HEAD вернет только последний коммит. Что мне делать в моем случае? - person capybaralet; 20.02.2015
comment
@David - вы можете заменить HEAD хешем последней фиксации, которую хотите сохранить. Таким образом, 1_ - person aashnisshah; 20.02.2015
comment
Файлы все еще отслеживаются после того, как я это сделаю. Есть ли способ отменить добавление? Было много неотслеживаемых файлов, которые я не планирую коммитить в ближайшее время, и потребуется много работы, чтобы выяснить, какие из них, и вручную git rm их. - person capybaralet; 21.02.2015
comment
@aashnisshah: я думаю, что синтаксис неверен. По умолчанию указывается список коммитов для отмены. Я думаю, что правильный синтаксис будет commitid..HEAD - person capybaralet; 21.02.2015
comment
Поэтому, когда я пробую это в реальной сделке, я получаю: ошибка: не удалось применить 65ac6c1... подсказка последних изменений: после разрешения конфликтов отметьте исправленные пути подсказка: с помощью «git add ‹paths›» или «git rm ‹ пути›' - person capybaralet; 21.02.2015
comment
После разрешения конфликтов вам нужно добавить файлы обратно в коммит, выполнив «git add» для каждого файла, который вы редактировали. - person aashnisshah; 23.02.2015