Vraag Een 'git push' ongedaan maken


Dit is wat ik met mijn gedaan heb verondersteld-te-stabiele tak...

% 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

Dat was allemaal een vergissing, zoals ik later besefte. Ik wil dit hele proces ongedaan maken en de alpha-0.3.0-branch terugzetten naar wat het was.

Wat moet ik doen?


468
2017-08-13 07:23


oorsprong


antwoorden:


U moet ervoor zorgen dat geen andere gebruikers van deze repository de onjuiste wijzigingen ophalen of proberen te bouwen bovenop de commits die u wilt verwijderen omdat u op het punt staat de geschiedenis terug te spoelen.

Dan moet je de oude referentie 'forceren'.

git push -f origin last_known_good_commit:branch_name

of in jouw geval

git push -f origin cc4b63bebb6:alpha-0.3.0

Je mag hebben receive.denyNonFastForwards ingesteld op de externe repository. Als dit het geval is, krijg je een foutmelding met de zin [remote rejected].

In dit scenario moet u de vertakking verwijderen en opnieuw maken.

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

Als dit niet werkt - misschien omdat je het hebt gedaan receive.denyDeletes ingesteld, dan moet je directe toegang hebben tot de repository. In de remote repository moet je dan iets als het volgende sanitair commando doen.

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

747
2017-08-13 07:47



Ik geloof dat je dit ook kunt doen:

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

Dit lijkt erg op de laatste methode, behalve dat je niet hoeft te rotzooien in de remote repo.


128
2017-11-24 16:48



git revert is minder gevaarlijk dan sommige van de voorgestelde benaderingen:

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>

Vervang 35f6af6f77f116ef922e3d75bc80a4a466f92650 door je eigen commit.


70
2017-09-03 11:39



De geaccepteerde oplossing (van @charles bailey) is zeer gevaarlijk als je in een gedeelde repo werkt.

Als een best practice, moeten alle commits gepusht naar een remote repo die wordt gedeeld als 'onveranderlijk' worden beschouwd. Gebruik in plaats daarvan 'git revert': http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#fixing-mistakes

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


31
2018-02-24 02:31



Een manier om dit te doen zonder de gewenste wijzigingen te verliezen:

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

Vervolgens kunt u de bestanden kiezen die u wilt duwen


26
2017-11-12 00:04



Een andere manier om dit te doen:

  1. maak een andere tak
  2. bekijk de vorige commit op die branch met behulp van "git checkout"
  3. druk op de nieuwe tak.
  4. verwijder de oude tak en druk op de delete (gebruik git push origin --delete <branch_name>)
  5. hernoem de nieuwe tak in de oude tak
  6. druk opnieuw.

15
2017-07-25 11:24



git push origin +7f6d03:master

Hiermee wordt je repo teruggezet naar het vermelde commit-nummer


7
2018-01-23 07:52



Maak meerdere commits ongedaan git reset --hard 0ad5a7a6 (Geef alleen commit SHA1 hash)

Laatste commit ongedaan maken

git reset --hard HEAD ~ 1 (wijzigingen in laatste commit worden verwijderd) git reset --soft HEAD ~ 1 (wijzigingen in laatste commit zullen beschikbaar zijn als niet-gecommitteerde lokale aanpassingen)


6
2018-05-12 06:40



Scenario 1: Als je de laatste commit, zeg 8123b7e04b3, ongedaan wilt maken, is hieronder het commando (dit werkte voor mij):

git push origin +8123b7e04b3^:<branch_name>

De output ziet er als volgt uit:

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

Extra informatie: Scenario 2: In sommige situaties wilt u misschien teruggaan naar wat u net ongedaan hebt gemaakt (in principe het ongedaan maken ongedaan maken) via de vorige opdracht en vervolgens het onderstaande commando gebruiken:

git reset --hard 8123b7e04b3

Output:

HEAD is now at cc6206c Comment_that_was_entered_for_commit

Meer info hier: https://github.com/blog/2019-how-to-undo-almost-anything-with-git


5
2017-12-19 12:02



Hiermee wordt de laatst gepushte commit in de remote branch (master of uw branch) verwijderd:

git push origin +HEAD^:master      

-1
2018-06-22 13:22