2015-05-20 21 views
5

Ich werde mein Bestes geben, um meine derzeitige Situation kurz zu beschreiben, und wäre für einen Rat sehr dankbar.Wie kann ich Commits, die in Github zurückgesetzt wurden, erneut zusammenführen?

Ich bin heute Morgen in einem großen Feature-Code-Zweig zusammengekommen, der einen kritischen Fehler aufwies. Um es rückgängig zu machen, hat mein Kollege die Zusammenführung (die mehrere Commits hatte) in GitHub zurückgesetzt und nach dem Ziehen schien alles in Ordnung zu sein.

Nachdem ich einige Änderungen am Feature-Zweig vorgenommen hatte, wollte ich sicherstellen, dass es wieder einging. Daher verwendete ich 'git merge master' in meinem Feature-Zweig (wie immer), um sicherzustellen, dass alles auf dem neuesten Stand ist .

Überraschenderweise war das Ergebnis davon, den gesamten neuen Code zu löschen, den ich wieder in den Master-Repo einbinden muss!

Ist dies aufgrund der Rückstellung, die auf dem Zweig aufgetreten ist? Wenn ich durch den Git Log schaue, kann ich sehen, dass alle Commits noch da sind. Noch seltsamer ist, dass die Pull-Anforderung in GitHub keine der ursprünglichen Commits im Diff anzeigt, sondern nur, was ich seit dem Zurücksetzen geändert habe.

Kann mir jemand helfen, einen Sinn zu finden?

Ich weiß, dass einige Leute vorgeschlagen haben, die Rückstellung einfach rückgängig zu machen, aber ich muss sauber zurückgehen, da die Änderungen, die ich gemacht habe, mit der Struktur eines Großteils des Codes zu tun haben.

+1

Hallo da. Probieren Sie 'git reflog' in Ihrer Konsole aus. es zeigt Ihnen die vollständige Geschichte von, was zu Ihrem Repo getan worden ist (nicht Zweig aber volles Repo). Überprüfen Sie den gewünschten Zeitpunkt und setzen Sie von dort fort. – CodeWizard

+0

Danke für den Kommentar! In meinem Fall sind die Commits durchgängig. Der Zweig wurde über mehrere Monate gemacht und es gibt keinen sauberen Ort, auf den ich mich zurücksetzen könnte.Ich denke, dass Rebase ist, was ich brauche, nur zu versuchen, herauszufinden, wie die Commits vollständig entfernen Ich bin wieder in der Feature-Zweig hinzufügen – Lizza

+1

Ok, krank Posten Sie es als Antwort - die Rebase, die Sie benötigen – CodeWizard

Antwort

6

ich in diesem selben Thema lief (In der Probe über den letzten 10 HEAD~10 nehmen) Einmal. Meine Lösung, die funktionierte, bestand darin, den "Rücksprung" rückgängig zu machen, bevor ich den Master wieder in meinen Zweig eingliederte.

In diesem Fall bleiben Ihnen alle Änderungen, einschließlich der neuen Korrekturen, die Sie erhalten haben.

git checkout master 
git checkout -b master-with-revert-revered 
git revert <revert commit id> 
git checkout fixed-branch 
git merge master-with-revert-revered 

Danach sollte Ihr Festnetz-Zweig direkt in Master ohne Probleme wieder zusammengeführt werden.

+0

Ich schätze die Einsicht, Daniel. Ich habe bis jetzt eine Reihe von verschiedenen Optionen ausprobiert, und aufgrund der Komplexität dieser Commits und der schieren Anzahl von ihnen, denke ich, dass die Umkehrung der Umkehr meine sicherste Wette sein wird. – Lizza

1

Ich denke, dass Fütterungsmaterial ist, was ich brauche, nur um herauszufinden, wie vollständig die Commits entferne ich wieder Zugabe bin in der Funktionszweig

, wenn Sie benötigen „remoe/merge“ verpflichten Sie sollten squash verwenden.
Squash ist eine der Rebase-Optionen.

Um es zu verwenden, müssen Sie interaktive Rebase tun.
git rebase -i HEAD~10 öffnet ein vi (oder einen anderen Editor, den Sie verwenden) und ermöglicht es Ihnen, Ihre Commits "neu zu mischen". Sie können Commit entfernen, sie zu einem einzigen zusammenführen, sie neu anordnen und mehr Brei.

Sie eine Liste von Optionen innerhalb des vi zusammen mit der Liste der Commits finden, die Sie reabse wählen

+0

Danke für Ihre Antwort! Also, in meinem Fall, weil Zurücksetzen nicht wirklich die Commits entfernt, möchte ich alle aus dem Zweig löschen? Sieht aus wie der Befehl dafür ist dd. Und es sieht auch so aus, als ob das erste Commit, das ich entfernen muss, über 100 Commits her ist, also HEAD ~ 100? – Lizza

+0

Genau. Sie haben es :-) – CodeWizard

+0

Oder Sie können auf den gewünschten Zeitpunkt zurückkehren, neue Verzweigung von diesem Punkt erstellen und dann interaktiv rebase diesen Punkt – CodeWizard