Отмена git push

Отмена git push
На чтение
20 мин.
Просмотров
12
Дата обновления
11.11.2024

Вот что я сделал в ветке , которая должна быть стабильной

 % git rebase masterFirst,  перематываю голову, чтобы воспроизвести свою работу поверх нее ... Быстро пересылается alpha-0.3.0 в master.% git status # На ветке alpha-0.3.0 # Ваша ветка опережает 'origin/alpha-0.3.0'  на 53 коммитов. # ничего не коммитить (рабочий каталог очищен)% git pushFetching remote Head ... refs/refs/heads/refs/tags/refs/remotes/'refs/heads/master': up-to-dateupdating 'refs /heads/alpha-0.3.0 'от cc4b63bebb6e6dd04407f8788938244b78c50285 до 83c9191dea88d146400853af5eb7555f252001b0 done'refs/Heads/unstable': последняя ошибка Эта информация об удаленном сервере была обновлена ​​как 
позже понял. Я хотел бы отменить весь этот процесс и вернуть ветвь alpha-0.3.0 к тому, что было.


Что мне делать?








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

  git push -f origin last_known_good_commit: branch_name  

или в вашем case
  git push -f origin cc4b63bebb6: alpha-0.3.0  

Вы можете получить . denyNonFastForwards установлен в удаленном репозитории. В этом случае вы получите сообщение об ошибке, содержащее фразу [удаленное отклонение] .
В этом сценарии вам придется удалить и воссоздать ветка.

  git push origin: alpha-0.3.0git push origin cc4b63bebb6: refs/Heads/alpha-0.3.0  

Если это не сработает - возможно, из-за того, что у вас установлен receive.denyDeletes , тогда у вас должен быть прямой доступ к репозиторию. Затем в удаленном репозитории вам нужно выполнить что-то вроде следующей команды сантехники.
  git update-ref refs/Heads/alpha-0.3.0 cc4b63bebb6 83c9191dea8   

                

                

Я считаю, что вы тоже можете это сделать:

  git checkout alpha-0.3.0git reset --hard cc4b63bebb6git push origin + alpha-0.3.0  

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

8


                

                

git revert менее опасен, чем некоторые из предлагаемых здесь подходов:

  prompt> git revert 35f6af6f77f116ef922e3d75bc80a4a466f92650 [master 71738a9] Revert »Проблема № 482 - Исправлена ​​ошибка.  "  Изменено 4 файла, 30 вставок (+), 42 удалений (-) приглашение> git status # На главном сервере # Ваша ветка опережает 'origin/master' на 1 фиксацию. # Ничего не коммитить (рабочий каталог очищен) приглашение>  

Замените 35f6af6f77f116ef922e3d75bc80a4a466f92650 своим собственным коммитом.

6


                

                

Способ сделайте это, не теряя нужных изменений:

  git reset cc4b63b git stashgit push -f origin alpha-0.3.0git stash pop  

Затем вы можете выбрать файлы, которые вы хотели отправить

0


                

                

Принятое решение (от @charles bailey) очень опасно, если вы работаете в общем репо.

Рекомендуется, чтобы все коммиты, отправленные в удаленное репо, к которому предоставлен общий доступ, считались неизменными. Вместо этого используйте git revert: http://www.kernel.org/pub/ software/scm/git/docs/user-manual.html # fixing-errors

https://git-scm.com/book/be/v2/Git-Basics-Undoing-Things

1


                

                
  git push origin + 7f6d03: master  

Это вернет ваше репо к указанному номеру фиксации

2


                

                

Другой способ сделать это:

  1. создать другую ветку
  2. проверить предыдущую фиксацию в этой ветке с помощью «git checkout».
  3. нажмите новую ветку.
  4. удалите старую ветку и нажмите кнопку удаления (используйте git push origin --delete )
  5. переименовать новую ветку в int o старую ветку
  6. нажмите еще раз.

1


                

                

Сценарий 1 : если вы хотите отменить последнюю фиксацию, скажите 8123b7e04b3, ниже это команда (это сработало для меня):

  git push origin + 8123b7e04b3 ^:   

Вывод выглядит так ниже:

  Всего 0 (дельта 0), повторно используется 0 (дельта 0) На https://testlocation/code.git + 8123b7e ... 92bc500 8123b7e04b3 ^ -> master  (принудительное обновление)  

Примечание. Чтобы обновить изменение в вашем локальном коде (чтобы удалить фиксацию локально):

  $ git reset --hard origin/ Отображаемое сообщение: HEAD теперь находится на 8a3902a comments_entered_for_commit  

Дополнительная информация: Сценарий 2 : в некоторых ситуациях вам может потребоваться отменить то, что вы только что отменили (в основном отменить он отменить) с помощью предыдущей команды, затем используйте следующую команду:

  git reset --hard 8123b7e04b3  

Вывод:

  HEAD теперь по адресу cc6206c Comment_that_was_entered_for_commit  

Подробнее здесь: https://github. com/blog/2019-как-отменить-почти все-с-git

1


                

                

Отменить несколько коммитов git reset --hard 0ad5a7a6 (просто укажите хэш SHA1 коммита)

Отменить последнюю фиксацию

git reset --hard HEAD ~ 1 (изменения последней фиксации будут удалены) git reset --soft HEAD ~ 1 (изменения в последней фиксации будут доступны как незавершенные локальные изменения)


                

                

вы можете использовать команду reset

  git reset --soft HEAD ^ 1  

затем:

  git reset  git commit --amend  

и

  git push -f  


                

                

Существующие ответы хороши и правильны, но что, если вам нужно отменить push но:

  1. Вы хотите сохранить коммиты локально или хотите сохранить незафиксированные изменения
  2. Вы не знаете, сколько коммитов вы только что нажали

Используйте эту команду, чтобы отменить изменение ссылки:

  git push -f origin refs/remotes/ origin/ @ {1}:   


                

                
  git reset --hard HEAD ^ git push origin -f  

Это удалит последнюю фиксацию с вашего локального устройства, а также с Github


                

                

Если вы хотите игнорировать последнюю фиксацию, которую вы только что вставили в удаленная ветка: это не удалит фиксацию, а просто проигнорирует ее b y перемещая указатель git на предыдущую фиксацию, на которую ссылаются HEAD ^ или HEAD ^ 1

  git push origin + HEAD ^: branch  

Но если вы уже отправили этот коммит, а другие вытащили ветку. В этом случае переписывание истории ветки нежелательно, и вместо этого вам следует отменить эту фиксацию:

  git revert  git push origin branch  

1


                

                

                                                  
0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий