Как я могу отменить `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>