Een Git-samenvoeging terugdraaien

Ik gebruik git merge --no-ff developom upstream wijzigingen in het dashboard samen te voegen

git log:

commit 88113a64a21bf8a51409ee2a1321442fd08db705
Merge: 981bc20 888a557
Author: XXXX <>
Date:   Mon Jul 30 08:16:46 2012 -0500
    Merge branch 'develop' into dashboard
commit 888a5572428a372f15a52106b8d74ff910493f01
Author: root <[email protected]>
Date:   Sun Jul 29 10:49:21 2012 -0500
    fixed end date edit display to have leading 0
commit 167ad941726c876349bfa445873bdcd475eb8cd8
Author: XXXX <>
Date:   Sun Jul 29 09:13:24 2012 -0500

De samenvoeging had ongeveer 50+ commits en ik vraag me af hoe ik de samenvoeging gewoon terug kan draaien, zodat het dashboard teruggaat naar de staat voor de samenvoeging

Het tweede deel hiervan is, als ik niet merge met --no-ff, krijg ik niet de commit ‘Vertakking samenvoegen ‘develop’ in dashboard‘ .. Hoe zou ik die samenvoeging terugdraaien?


Antwoord 1, autoriteit 100%

Het terugzetten van een merge-commit is uitgebreid behandeld in andere vragen.Als je vast -forward merge, de tweede die je beschrijft, je kunt git resetgebruiken om terug te gaan naar de vorige staat:

git reset --hard <commit_before_merge>

Je kunt de <commit_before_merge>vinden met git reflog, git log, of, als je de moxy voelt (en heb niets anders gedaan): git reset --hard HEAD@{1}


Antwoord 2, autoriteit 42%

Vanaf hier:

http://www.christianengvall.se/undo-pushed-merge- git/

git revert -m 1 <merge commit hash>

Git revert voegt een nieuwe commit toe die de gespecificeerde commit terugdraait.

Het gebruik van -m 1vertelt git dat dit een merge is en dat we terug willen gaan naar de parent-commit op de master-branch. U zou -m 2gebruiken om de ontwikkeltak te specificeren.


Antwoord 3, autoriteit 10%

Reset gewoon de merge commit met git reset --hard HEAD^.

Als je –no-ff gebruikt, maakt git altijd een merge, zelfs als je er niets tussenin hebt gedaan. Zonder –no-ff zal git gewoon snel vooruitspoelen, wat betekent dat je branches HEAD op HEAD van de samengevoegde branch worden gezet. Om dit op te lossen, zoek je de commit-id waarnaar je wilt terugkeren en git reset --hard $COMMITID.


Antwoord 4, autoriteit 5%

git revert -m 1 88113a64a21bf8a51409ee2a1321442fd08db705

Maar kan onverwachte bijwerkingen hebben. Zie --mainline parent-numberoptie in git-scm.com/docs /git-revert

Misschien zou een brute maar effectieve manier zijn om de linker ouder van die commit uit te checken, een kopie te maken van alle bestanden, HEADopnieuw uit te checken, en alle inhoud te vervangen door de oude bestanden. Dan zal git je vertellen wat er wordt teruggedraaid en maak je je eigen terugzet-commit 🙂 !


Antwoord 5

Als je de vertakking hebt samengevoegd, dan de samenvoeging ongedaan hebt gemaakt met behulp van een pull-verzoek en dat pull-verzoek hebt samengevoegd om terug te keren.

De gemakkelijkste manier die ik voelde was om:

  1. Haal een nieuwe branch uit ontwikkel/master (waar je samengevoegd bent)
  2. Zet de “revert” terug met git revert -m 1 xxxxxx(als de revert is samengevoegd met een branch) of gebruik git revert xxxxxxals het een simpele revert was
  3. De nieuwe vertakking zou nu de wijzigingen moeten hebben die je opnieuw wilt samenvoegen.
  4. Breng wijzigingen aan of voeg deze branch samen om te ontwikkelen/masteren

Other episodes