Vai kāds zina, kā viegli atcelt git rebase?
Vienīgais veids, kas nāk prātā, ir darīt to manuāli:
Manā pašreizējā situācijā tas darbosies, jo es varu viegli pamanīt izdarīt grozījumus no abām filiālēm (viena bija mana lieta, otra - mana kolēģa lieta).
Tomēr mana pieeja man šķiet neoptimāla un kļūdu iespējamība (pieņemsim, ka es tikko biju pārbāzējis 2 savas filiāles).
Kādas idejas?
Precizējums: Es'runāju par pārbāzi, kuras laikā tika pārpublicēti vairāki nodevumi. Ne tikai vienu.
Visvienkāršākais veids būtu reflog atrast zaru galveno nodošanu, kāda tā bija tieši pirms pārbāzes sākuma...
git reflog
un atiestatīt pašreizējo zaru uz to (ar parastajiem brīdinājumiem par pilnīgu pārliecību pirms atiestatīšanas ar --hard
opciju).
Pieņemsim, ka vecais nodevums bija HEAD@{5}}
žurnālā:
git reset --hard HEAD@{5}
Sistēmā Windows var būt nepieciešams citēt atsauci:
git reset --hard "HEAD@{5}"
Jūs varat pārbaudīt kandidāta vecās galvas vēsturi, vienkārši veicot git log HEAD@{5}
(Windows: git log "HEAD@{5}"
).
Ja neesat atslēguši atzarojuma reflogu, jums vajadzētu būt iespējai vienkārši veikt git reflog branchname@{1}
, jo rebase atvieno atzarojuma galvu pirms atkārtotas pievienošanas galīgajai galvai. Tomēr es to vēlreiz pārbaudītu, jo nesen to neesmu pārbaudījis.
Pēc noklusējuma visi reflogs ir aktivizēti repozitorijiem, kas nav tukši:
[core]
logAllRefUpdates = true
Atiestatīt zaru uz tā vecā galotnes "dangling commit" objektu, protams, ir vislabākais risinājums, jo tas atjauno iepriekšējo stāvokli, neieguldot nekādas pūles. Bet, ja gadās, ka esat pazaudējis šos nodevumus (piemēram, tāpēc, ka pa to laiku esat savācis krātuvi vai tas ir svaigs klons), jūs vienmēr varat no jauna izveidot zaru. Šim nolūkam galvenais ir slēdzis --onto
.
Pieņemsim, ka jums bija tēmas atzars ar iedomātu nosaukumu topic
, kuru jūs atzarojāt no master
, kad master
gals bija 0deadbeef
commit. Kādā brīdī, atrodoties topic
atzarā, jūs veicāt git rebase master
. Tagad jūs vēlaties to atcelt. Lūk, kā to izdarīt:
git rebase --onto 0deadbeef master topic
Tas paņems visus Topic
iesūtījumus, kas nav master
, un pārpublicēs tos uz 0deadbeef
.
Izmantojot --onto
, jūs varat pārkārtot savu vēsturi praktiski jebkurā kāda veida formā.
Have fun. :-)
Attiecībā uz vairākkārtējām nodevām atcerieties, ka jebkura nodevuma gadījumā ir atsauce uz visu vēsturi, kas noveda pie šī nodevuma. Tāpēc Čārlza atbildē "veco kopiju" lasiet kā "jaunāko no vecajām kopijām". Ja jūs atjaunosiet šo kopiju, tad visa vēsture, kas noveda pie šīs kopijas, parādīsies no jauna. Tam būtu jādara tas, ko vēlaties.