2012-08-28 13 views
5

Ich habe folgende Situation:einen Zweig zu spät gestartet, die Eltern meiner Niederlassung ändern

A---B---F---G---H (master) 
    \ 
     \ 
     C---D---E (experimental) 

Mein Problem ist, dass B eine sehr, sehr schlechte Sache ist, die nicht auf master geschehen sein soll. Es gehört auf . Aber F --- G --- H sind in Ordnung. Gibt es einen Weg, um alles so aussehen zu machen:

A---F'---G'---H' (master) 
\ 
\ 
    B---C---D---E (experiment) 

ich gelesen habe über rebase und Sachen wie das, aber das größte Problem ist, dass master-origin gedrückt wurde.

+0

Gibt es zu viele Personen im Team, die Sie manuell informieren sollten, wenn Sie den Master rebasen? Falls ja, können Sie einfach 'git revert B' zurückgeben. – bcmcfc

+0

Ich muss B im Experimentzweig behalten. –

Antwort

3

git rebase --onto A B master wird tun.

Scheint, Sie haben Master bereits an orgin geschoben, wenn Sie sicher sind, dass es sicher ist, Master-Zweig der Herkunft zu überschreiben, tun Sie einfach eine git push -f auf Master-Zweig. Seien Sie sich bewusst, dass andere Entwickler einen Konflikt haben können, wenn sie vom Ursprung ziehen. Normalerweise sollte die Verzweigung im öffentlichen Repo unberührt bleiben, was bedeutet, dass Sie nicht erwarten können, Commit B vom Master zu entfernen. Alles, was Sie tun können, ist, den durch Commit B eingeführten Fehler in einem neuen Commit zu beheben und ihn erneut zu masteren.

Wenn es möglich ist, Ihre Teammitglieder über die Rebase zu informieren, und Sie darauf bestehen, dann ist es in Ordnung für eine Neuschreibung, stellen Sie nur sicher, dass dies nicht zu oft geschieht.

+0

Diese Art von Widersprüchen" Rebase-Commits nicht, die Sie in ein öffentliches Repository verschoben haben "von http: // git- scm.com/book/de/Git-Branching-Rebasing –

+1

Ja, aber was Sie fragen, ist eine Neuschreibung der Geschichte, die "git rebase" ist nur das Werkzeug für diese Bedingung. Im Allgemeinen sollte die Verzweigung im öffentlichen Repo so bleiben, wie sie ist, was bedeutet, dass Sie remove commit B in master nicht erwarten können. Alles, was Sie tun können, ist, den von B eingeführten Fehler in einem neuen Commit zu beheben und ihn erneut zu drücken. Aber wenn es möglich ist, Ihre Teammitglieder über die Rebase zu informieren, dann ist es in Ordnung für eine Neufassung, aber stellen Sie sicher, dass dies nicht zu oft geschieht. – weynhamz

+0

Ich werde diese Option verwenden. Vielen Dank! –

5

Auf Master laufen:

git revert B

Sie können dann sicher schieben, wenn die Änderungen nachgeordnet, dass durch sie nicht direkt betroffen commit (dh der Inhalt des commit kann B ohne entfernt werden Stauchen die anderen Änderungen, die nach dem es darum ging, es klingt sicherlich wie dies der Fall ist)

Dies würde erstellen:..

A---B---F---G---H---I (master) 
    \ 
     \ 
     C---D---E (experimental) 

Dabei ist I das Zurücksetzen-Commit. Der Master behält seine Geschichte bei, während er den Inhalt von B entfernt, experimentell behält er die Änderungen B bei.

Möglicherweise müssen Sie das Commit I rückgängig machen, wenn Sie später experimental in den Master migrieren.

+3

Danke für deine Antwort, aber es lässt die Geschichte kompliziert erscheinen, also denke ich, dass ich riskiere, dass meine zwei Mitentwickler wütend werden und mit Rebase gehen. +1 für dich obwohl. –

Verwandte Themen