2016-07-01 10 views
3

Ich habe die folgende Sequenz von Commits:Wie unerwünschte entfernen begehen und verschmelzen

A---B---D---E---G---H--- 
    \ /\ 
     C---/ F--- 

Commit D unsachgemäße Veränderung einführt und fusionieren E leitet sie an F und G. begehen Ich mag würde D entfernen und E verpflichtet sich vollständig. Was zu tun haben:

A---B---C---G---H--- 
     \ 
      F--- 

Antwort

0

Sie ändern hier die Geschichte. Wenn diese Geschichte in anderen Repos nicht vorhanden ist, ist das in Ordnung, andernfalls stellen Sie sicher, dass Sie wissen, was Sie tun.

Kasse ein Zweig my_better_history mit HEAD bei C git checkout -b my_better_history C genannt

in den Commits Bringen Sie wollen: git cherry-pick G H

Überprüfen Sie Ihre Arbeit. Wenn Ihre ursprüngliche Verzweigung master hieß, können Sie git diff-tool master tun, um sicherzustellen, dass die Status identisch sind. Wenn alles gut ist, kannst du deine neue Geschichte zu deiner offiziellen Geschichte machen. Angenommen, Sie mit Zweig begann master, dann könnten Sie tun:

git checkout master 
git reset --hard C#now your master is back to the common history point. 
git merge my_better_history 

Jetzt Master wird die gewünschte Geschichte.

+0

Dank. Ja, ich habe vergessen zu erwähnen, dass alles auf meinem lokalen Repo ist. – msek

0
  • Sie müssen dies B_COMMIT_HASH zurücksetzen --hard
  • dann cherry-pick G und H verpflichtet
  • afret Sie werden Sie deateched wird Push müssen, um Ihre brache mit flag -f
0

Dies ist keine vollständige Antwort, die Sie den Rest herauszufinden, müssen .. aber HTH

LÖSUNG 1:

Wenn Sie mit der Überarbeitung hostory sind ok - !! auf einigen Workflows ist das sehr schlecht .. auf einigen ist es nicht - wie wenn Sie Ihre lokale Niederlassung etc .. aber seien Sie vorsichtig !!

können Sie nettes Tool verwenden interaktive Fütterungsmaterial:

git rebase -i HASH_OF_B 

Sie werden etwas sehen wahrscheinlich:

pick H 
pick G 
pick F 
pick D <-- remove this line 
pick C 
pick A 

Und Sie werden nur diejenigen löschen, die D sind (hoffen, dass es diese Arbeit Art und Weise, wenn Sie mehrere Kinder usw.) haben - sehr vorsichtig sein, ich bin nicht sicher, was das tun ..

LÖSUNG 2:

git revert C 
git revert D 

und Sie sind sicher - nicht die Geschichte zu ändern etc ..

Sie müssen dies auf beiden Zweige tun - auf dem F-Zweig und auch auf dem Zweig H - nicht sicher, was zu der Zusammenführung geschieht begehen, wenn Sie eingeführt D fusionieren Änderungen in Bezug auf ..

Verwandte Themen