git delete tag - Desfazendo um 'git push'




5 Answers

Você precisa certificar-se de que nenhum outro usuário deste repositório esteja buscando as alterações incorretas ou tentando construir sobre as confirmações que deseja remover, pois você está prestes a retroceder no histórico.

Então você precisa 'forçar' empurrar a referência antiga.

git push -f origin last_known_good_commit:branch_name

ou no seu caso

git push -f origin cc4b63bebb6:alpha-0.3.0

Você pode ter receive.denyNonFastForwards definido no repositório remoto. Se este for o caso, você receberá um erro que inclui a frase [remote rejected] .

Nesse cenário, você precisará excluir e recriar o ramo.

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

Se isso não funcionar - talvez porque você tenha receive.denyDeletes , você precisa ter acesso direto ao repositório. No repositório remoto, você precisa fazer algo como o seguinte comando de encanamento.

git update-ref refs/heads/alpha-0.3.0 cc4b63bebb6 83c9191dea8
list tags

Aqui está o que eu fiz no meu ramo supostamente estável ...

% git rebase master
First, rewinding head to replay your work on top of it...
Fast-forwarded alpha-0.3.0 to master.
% git status
# On branch alpha-0.3.0
# Your branch is ahead of 'origin/alpha-0.3.0' by 53 commits.
#
nothing to commit (working directory clean)
% git push
Fetching remote heads...
  refs/
  refs/heads/
  refs/tags/
  refs/remotes/
'refs/heads/master': up-to-date
updating 'refs/heads/alpha-0.3.0'
  from cc4b63bebb6e6dd04407f8788938244b78c50285
  to   83c9191dea88d146400853af5eb7555f252001b0
    done
'refs/heads/unstable': up-to-date
Updating remote server info

Isso foi tudo um erro, como mais tarde percebi. Gostaria de desfazer todo esse processo e reverter a ramificação alpha-0.3.0 de volta para o que era.

O que devo fazer?




git revert é menos perigoso do que algumas das abordagens sugeridas aqui:

prompt> git revert 35f6af6f77f116ef922e3d75bc80a4a466f92650
[master 71738a9] Revert "Issue #482 - Fixed bug."
 4 files changed, 30 insertions(+), 42 deletions(-)
prompt> git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
prompt>

Substitua 35f6af6f77f116ef922e3d75bc80a4a466f92650 pelo seu próprio commit.




Uma maneira de fazer isso sem perder as alterações desejadas:

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

Então você pode escolher os arquivos que você quis empurrar




git push origin +7f6d03:master

Isso reverterá seu repo para o número de confirmação mencionado




Cenário 1 : Se você quiser desfazer o último commit, diga 8123b7e04b3, abaixo está o comando (isso funcionou para mim):

git push origin +8123b7e04b3^:<branch_name>

Saída parece abaixo:

Total 0 (delta 0), reused 0 (delta 0)
To https://testlocation/code.git
 + 8123b7e...92bc500 8123b7e04b3^ -> master (forced update)

Informações adicionais: Cenário 2 : Em algumas situações, você pode querer reverter o que acabou de desfazer (basicamente desfazer o desfazer) através do comando anterior e, em seguida, use o comando abaixo:

git reset --hard 8123b7e04b3

Saída:

HEAD is now at cc6206c Comment_that_was_entered_for_commit

Mais informações aqui: https://github.com/blog/2019-how-to-undo-almost-anything-with-git




Related


Tags

git   git-push