Причина сбоя вашей команды git reset
в том, что git reset
на самом деле не удаляет коммит. Вместо этого он перемещает вас из текущего коммита, идентифицируемого вашим текущим именем ветки, в предыдущий коммит в той же ветке. Но есть только один коммит! У него нет предыдущего коммита. Поэтому go.
некуда больше. Как сказал Марун , вы можете обновить свой индекс - в этом случае, запустив git rm --cached node_modules
, удалите все файлы node_modules
из Индекс, оставив их в своем рабочем дереве, а затем запустите git commit --amend
. --amend
изменяет операцию фиксации. Вместо добавления коммита к текущей ветви, он выталкивает текущий коммит с пути , так что новый коммит занимает его место.
Когда у вас есть более одного коммита, это имеет больше смысла наглядно. Например, если у вас было три коммита - с тремя разными идентификаторами ha sh, которые мы просто будем называть A
, B
и C
здесь - вы можете нарисовать их так:
A--B--C <-- master
Использование git commit --amend
пушей C
при создании D
:
C [abandoned]
/
A--B--D <-- master
Обратите внимание, что существующий коммит C
остается в вашем хранилище. Просто нет никакого очевидного способа найти это больше: git log
не будет показывать это, потому что git log
теперь начинается с D
, который теперь является последним коммитом на ваш master
, и работает обратно B
, а затем A
.
В этом случае, однако, нет никаких предыдущих коммитов. Ваш существующий набор коммитов будет нарисован больше как:
A <-- master
Когда Git пушит A
из-за способа поставить B
, вы получите:
A
B <-- master
Опять же, нет очевидного способа найти коммит, который вы только что "заменили". Он все еще существует, и по умолчанию останется на 30 дней, если вы решите, что хотите его вернуть, но в большинстве случаев его просто нет. В конце концов, ваш Git отбросит его, потому что у него нет имени, по которому кто-либо может найти его.
Однако, если вы отправили коммит A
некоторым другие Git, используя, например, git push origin master
, , что Git все еще имеет копию commit A
. Вам нужно будет заставить их заменить A
на ваши новые и улучшенные B
. Для этого, как правило, вам нужно будет использовать git push --force origin master
или git push --force-with-lease origin master
.
Если вы не отправили коммит A
в какой-либо другой репозиторий Git, ни один из это необходимо.