2016-08-03 15 views
1

In meinem Repo hatte ich einen Master-Zweig und einen Bugfix-Zweig. Ich habe meinen Bugfix gemacht und ihn in den Master eingebunden. Dann, in einem Anfall von Wahnsinn über einen dummen Fehler, tat ich das Undenkbare. Ich habe nach der Zusammenführung mit git commit --amend 3 Zeichen zum Master hinzugefügt. Ich schrieb Geschichte um. Dann, zu meiner Bestürzung, betraf es nur Master und nicht Bugfix, so dass, wenn ich (auf Master) git branch --no-merged starte ich sehe, dass Bugfix nicht zusammengeführt wird. Also, ich check Bugfix und mache die gleichen Änderungen, so dass git diff bugfix master nichts zurückgibt, und dann vom Master überprüfe ich wieder git branch --no-merged, und es heißt immer noch Bugfix ist nicht zusammengeführt. So, jetzt habe ich 2 identische Zweige, die ich zusammengeführt werden möchte, die nicht sind, und ich möchte nicht ein anderes commit verwenden. Wie kann ich sie kombinieren, so git sieht sie als verschmolzen und git branch --no-merged gibt Bugfix nicht zurück?"Merge" zwei identische Zweige

+2

Machen Sie das Merge-Commit rückgängig, fusionieren Sie erneut und gehen Sie von dort aus. Ich glaube nicht, dass der Weg, auf dem du stehst, irgendeine Frucht bringen wird (zumindest keine, die du essen möchtest). –

+0

Auch nachdem Sie die Änderung vorgenommen haben, hat das Commit immer noch die beiden Eltern und ist ein Merge-Commit, also macht es keinen Sinn, dass der Bugfix danach in --no-merged erscheint. – DavidN

+0

@DavidN Ich weiß nicht, warum es passiert ist, ich liste nur auf, was mir passiert ist. Ich werde versuchen es zu reproduzieren und Sie wissen zu lassen, wenn ich kann. – thesecretmaster

Antwort

1

Manchmal ist es am klügsten, wenn Sie auf einer Spur verloren sind, Ihre Schritte zu einem früheren Punkt zurückzuverfolgen, wenn Sie nicht verloren waren. In Ihrem Fall würde ich das geänderte Merge-Commit in master rückgängig machen und auch das Fix-Commit in bugfix nuke. Wiederholen Sie dann die Zusammenführung ohne zusätzliche Änderungen.

schlecht Rückgängig in Bugfix begehen:

git checkout bugfix  # switch to bugfix 
git reset --hard HEAD~1 # nuke the fix commit 

Undo im Master begehen fusionieren:

git checkout master  # switch to master 
git reset --hard HEAD~1 # nuke the amended merge commit 

Jetzt können Sie die Zusammenführung wiederholen:

git merge bugfix 

Hinweis: Diese Antwort wird angenommen s, dass Sie noch nichts zur Fernbedienung geschoben haben. Wenn ja, sollten Sie git revert verwenden, um die fehlerhaften Commits rückgängig zu machen, anstatt den Verlauf neu zu schreiben.