Удалить git commit, который не был передан - PullRequest
545 голосов
/ 23 октября 2009

Я сделал git commit, но еще не отправил его в хранилище. Поэтому, когда я делаю git status, я получаю '# Ваша ветка опережает' master 'на 1 коммит.

Так что, если я хочу откатить мой главный коммит, могу ли я просто сделать:

git reset --hard eb27bf26dd18c5a34e0e82b929e0d74cfcaab316

учитывая, что когда я делаю git log, я получаю:

commit eb27bf26dd18c5a34e0e82b929e0d74cfcaab316
Date:   Tue Sep 29 11:21:41 2009 -0700


commit db0c078d5286b837532ff5e276dcf91885df2296
Date:   Tue Sep 22 10:31:37 2009 -0700

Ответы [ 9 ]

519 голосов
/ 23 октября 2009

На самом деле, когда вы используете git reset, вы должны ссылаться на коммит, который вы сбрасываете на ; так что вы, возможно, захотите коммит db0c078, вероятно.

Более простой версией будет git reset --hard HEAD^, чтобы сбросить предыдущий коммит перед текущей головой; таким образом, вам не нужно копировать идентификаторы коммитов.

Осторожно, когда вы делаете git reset --hard, так как вы можете потерять любые незафиксированные изменения, которые у вас есть. Возможно, вы захотите проверить git status, чтобы убедиться, что ваша рабочая копия чистая, или что вы действительно хотите удалить любые изменения, которые там есть.

Кроме того, вместо HEAD вы можете использовать origin/master в качестве справки, как предлагает @bdonlan в комментариях: git reset --hard origin/master

498 голосов
/ 11 января 2013

ЕСЛИ вы НЕ передали изменения на удаленный

git reset HEAD~1

Проверьте, чиста ли рабочая копия, git status.

В противном случае вы отправили изменения на удаленный

git revert HEAD

Эта команда вернет / удалит последний коммит / изменение, а затем вы можете нажать

141 голосов
/ 03 июня 2014
git reset --hard origin/master

, чтобы сбросить его до того источника, в котором он находился.

Это сообщение было опубликовано @bdonlan в комментариях . Я добавил этот ответ для людей, которые не читают комментарии.

29 голосов
/ 22 февраля 2019

У этого вопроса есть две ветви (откат фиксации не означает, что я хочу потерять все свои локальные изменения):

1. Чтобы отменить последний коммит и отменить изменения в зафиксированном файле do:

git reset --hard HEAD~1

2. Чтобы отменить последний коммит, но сохранить локальные изменения (на диске) do:

git reset --soft HEAD~1

Это (более поздняя команда) приведет вас в состояние, в котором вы были бы, если бы вы сделали git add.

Если после этого вы хотите удалить файлы, выполните

git reset

Теперь вы можете вносить больше изменений перед добавлением и последующей фиксацией.

27 голосов
/ 04 сентября 2018

Просто введите в консоли:

$ git reset HEAD~

Эта команда отбрасывает все локальные коммиты перед удаленным HEAD

22 голосов
/ 22 августа 2018

Удалить последний коммит перед нажатием

git reset --soft HEAD~1

1 означает последний коммит, если вы хотите удалить два последних использования 2 и т. Д. *

15 голосов
/ 18 августа 2015

Я столкнулся с той же ситуацией, что и ниже, так как это намного проще. Передав commit-Id, вы можете перейти к конкретному коммиту, на который хотите перейти:

git reset --hard {commit-id}

Поскольку вы хотите удалить свой последний коммит, вам нужно передать commit-Id, куда вам нужно переместить указатель:

git reset --hard db0c078d5286b837532ff5e276dcf91885df2296
9 голосов
/ 06 марта 2018

Вот что я делаю:

Первая проверка вашей ветки (для моего случая master ветка):

git checkout master

Затем сбросьте на удаленную HEAD ^ (, это удалит все ваши локальные изменения ), принудительно очистите и вытяните:

git reset HEAD^ --hard && git clean -df && git pull
1 голос
/ 03 мая 2017

Одним из способов будет удаление локальной ветки и извлечение этой ветки с сервера, если ваша локальная ветвь опережает удаленную по нескольким коммитам и вам необходимо отменить все их.

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