Как я могу отменить `git commit` локально и на удаленном устройстве после` git push`

Я выполнил git commit, а затем git push. Как я могу вернуть это изменение как на локальные, так и на удаленные репозитории?

$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael [email protected]>
Date:   Tue Jun 11 12:24:23 2011 -0700

Ответ 1

git reset --hard HEAD~1
git push -f <remote> <branch>

(Пример push: git push -f origin bugfix/bug123)

Это приведет к отмене последнего фиксации и перенесению обновленной истории на удаленный. Вам нужно передать -f, потому что вы заменяете историю восходящего потока на пульте дистанционного управления.

Ответ 2

Как правило, сделайте "обратную" фиксацию, используя:

git revert 364705c

затем отправьте его на пульт, как обычно:

git push

Это не приведет к удалению фиксации: он делает дополнительную фиксацию, которая отменяет все, что было сделано первым. Все остальное, не очень безопасное, особенно когда изменения уже были распространены.

Ответ 3

Прежде всего, Relax.

"Ничто не находится под нашим контролем. Наш контроль - это просто иллюзия.", "Чтобы ошибаться человек"

Я понял, что вы случайно нажали свой код на remote-master. ЭТО все будет хорошо.

1.. Сначала получите значение SHA-1 комманды, которую вы пытаетесь вернуть, например. зафиксировать ветвь. запустите это:

git log

вы увидите кучу 'f650a9e398ad9ca606b25513bd4af9fe...' как строки вместе с каждым из коммитов. скопируйте этот номер из фиксации, который вы хотите вернуть назад.

2. Теперь введите команду ниже:

git reset --hard your_that_copied_string_but_without_quote_mark

вы должны увидеть сообщение типа "HEAD сейчас". вы на виду. То, что он только что сделал, это отразить это изменение локально.

3. Теперь введите команду ниже:

git push -f

вы должны видеть как

"предупреждение: push.default не задано, его неявное значение изменилось в........ Всего 0 (дельта 0), повторно используется 0 (дельта 0)...... your_branch_name → master (принудительное обновление)."

Теперь вы все поняли. Проверьте мастер с "git log" еще раз, ваш fixed_destination_commit должен быть в верхней части списка.

Добро пожаловать (заранее;))

UPDATE:

Теперь изменения, которые вы сделали до того, как все это началось, теперь исчезли. Если вы хотите вернуть эти тяжелые работы снова, это возможно. Благодаря командам git reflog и git вишня.

Для этого я хотел бы предложить этот блог или this пост.

Ответ 4

git reset HEAD~1, если вы не хотите, чтобы ваши изменения ушли (нестатические изменения). Изменить, зафиксировать и снова нажать git push -f [origin] [branch]

Ответ 5

Вы можете выполнить интерактивную перезагрузку:

git rebase -i <commit>

Это вызовет ваш редактор по умолчанию. Просто удалите строку, содержащую фиксацию, которую вы хотите удалить, чтобы удалить ее.

Вам, конечно же, потребуется доступ к удаленному репозиторию, чтобы применить это изменение там тоже.

Смотрите этот вопрос: Git: удаление выбранных коммитов из репозитория

Ответ 6

В качестве альтернативы:

git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master

Принудите основную ветвь исходного репозитория источника родительскому элементу последнего комманда

Ответ 7

Попробуйте использовать

git reset --hard <commit id> 

Обратите внимание: здесь commit id будет идентификатором фиксации, к которой вы хотите перейти, но не к идентификатору, который вы хотите использовать reset. это был единственный момент, когда я тоже застрял.

затем нажмите

git push -f <remote> <branch>