Отмена git push

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

 % 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



Войдите, чтобы продолжить

В этом посте я покажет, как я иногда восстанавливаю неправильные изменения (коммиты) в проекте кодирования, используя git в командной строке.

Зачем мне это нужно?

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

Как вы видите последнюю фиксацию?

Чтобы протестировать конкретную фиксацию , вам нужен хеш. Чтобы получить хеш, вы можете запустить git log , тогда вы получите следующий результат:

  root  @debian:/home/debian/test-project # git logcommit  Автор: Изабель Коста  Дата: вс, 4 февраля, 21:57:40 2018 +0000  фиксация  Автор: Изабель Коста  Дата: вс, 4 февраля, 21:42:26 2018 +0000  (...)  

Вы также можете запустить git log --oneline , чтобы упростить вывод:

  root @ debian:/home/debian/test-project # git log --oneline   cdb76bf Добавлена ​​еще одна Feature425161 Добавлена ​​одна функция (...)  

Чтобы протестировать конкретную фиксацию (например: ), которая, по вашему мнению, имеет последнюю рабочую версию, вы можете ввести следующее:

  git checkout   

Это сделает рабочий репозиторий соответствовать состоянию этого точного совершить.

После этого вы получите следующий результат:

  root @ debian:/ home/debian/test-project # git checkout  Примечание: проверка ''. Вы находитесь в состоянии 'отсоединенная голова'.  Вы можете осмотреться, внести экспериментальные изменения и зафиксировать их, и вы можете отказаться от любых коммитов, которые вы делаете в этом состоянии, не затрагивая какие-либо ветки, выполнив еще одну проверку. Если вы хотите создать новую ветку для сохранения созданных вами коммитов, вы можете это сделать (сейчас  или позже), снова используя -b с командой checkout.  Пример: git checkout -b new_branch_nameHEAD теперь находится в  ...   

После анализа конкретной фиксации, если вы затем решите остаться в этом состоянии фиксации вы можете отменить последнюю фиксацию.

Как отменить эту фиксацию?

Если вы хотите отменить/отменить последнюю фиксацию, вы можете сделать далее, используя хеш фиксации, который вы получаете из команды git log :

  git revert    

Эта команда создаст новую фиксацию со словом «Вернуть» в начале сообщения. После этого, если вы проверите статус своего репозитория, вы заметите, что у вас отключена HEAD при коммите, который вы тестировали ранее..

  root @ debian:/home/debian/test-project # git statusHEAD отсоединен по адресу 69d885e (...)  

Вы не хотите видеть это сообщение, поэтому, чтобы исправить это и снова прикрепить HEAD к вашему рабочему репозиторию, вы должны проверить ветку, над которой вы работаете:

  git checkout   

Во время создания этого сообщение, я нашел этот учебник - Отмена коммитов и изменений - от Atlassian, который очень хорошо описывает эту проблему.

Резюме

  • Если вы хотите протестировать предыдущую фиксацию, просто выполните git checkout ; тогда вы можете протестировать эту последнюю рабочую версию вашего проекта.

  • Если вы хотите отменить последнюю фиксацию, просто выполните git revert ; затем вы можете нажать эту новую фиксацию, которая отменила вашу предыдущую фиксацию.

  • Чтобы исправить отделенную головку, выполните git checkout .


Вы можете найти меня в Twitter, LinkedIn, Github, Medium и на моем личном веб-сайте.

Оцените статью
clickpad.ru
Добавить комментарий