2017-01-25 2 views
0

Ich bin ziemlich neu in Git, da ich es erst seit ein paar Monaten benutze, seit ich einen neuen Client habe (das war das, was sie benutzt haben, um die Versionskontrolle ihrer Software zu verwalten, bevor ich anfing für sie zu arbeiten).Git ersetzen Master-Zweig mit einem anderen Zweig - Git Merge -s unsere?

Ich habe vor kurzem einen Zweig development mit meinem lokalen Zweig master zusammengeführt und master auf den Server geschoben. Ich hatte die Website (Website in Django/Python geschrieben) auf meinem lokalen Entwicklungscomputer getestet, bevor ich sie auf den Server schob, und alles schien korrekt zu funktionieren (einschließlich der Fehlerbehebung, die im Zweig development implementiert wurde).

Nach dem Testen der Änderungen, die nach dem Drücken auf den Server vorgenommen wurden, fand ich jedoch, dass etwas einen Teil der Website gebrochen hatte. Also habe ich einen alten commit auf dem Server ausgecheckt, und die Live-Version benutzt jetzt diesen alten commit, was bedeutet, dass es sich in einem "Detached HEAD" -Zustand befindet, aber funktioniert.

Also, mein lokaler master Zweig ist derzeit die Version mit der Bugfix, die ich auf den Server geschoben hatte (die lokal arbeitet, aber nicht auf dem Server), aber da muss ich an einem anderen Aspekt arbeiten Ich möchte auf eine Sicherungskopie von master zurückgreifen, die ich vor dem Zusammenführen des development-Zweigs mit dem Bugfix in master gemacht habe, so dass ich mich aus dem 'neuesten Arbeitsstatus' des Codes entwickle.

Die Zweige ich auf meinem Rechner haben, sind:

master (mit development hinein verschmolzen, was sonst gebrochen hat etwas)

masterBackup (dh der master Zweig, wie es war, bevor development hinein Verschmelzung)

development (das ist der Zweig, an dem der ursprüngliche Fehler behoben wurde, aber etwas anderes kaputt ist jetzt) ​​

So effektiv, masterBackup ist eigentlich meine Arbeit 'Master' Zweig im Moment, seit der Zusammenführung development in master brach master. Ich möchte masterBackup meine 'Master'-Zweig wieder machen, und master in seinem aktuellen Zustand kann verworfen werden/entfernt werden. Ich habe immer noch den Zweig development, so kann in warum/wie dies die Website brach und beheben Sie es dort vor dem Zusammenführen es zu master wieder.

ich die Frage an How to replace master branch in git, entirely, from another branch? auf das fand die akzeptierte Antwort zeigt an, dass ich die folgenden Schritte tun soll:

git checkout masterBackup 
git merge -s ours master 
git checkout master 
git merge masterBackup 

Aber ich kann nichts definitiv finden zu erklären, was der Befehl git merge -s ours tut ... dann ist dies definitiv, wie man meine masterBackup Verzweigung wieder in den Zweig master macht?

Antwort

3

die Befehle in der Post nicht ist passend für dich. Das Ergebnis der Befehle ist, dass der MasterBackup-Zweig alle Änderungen in der Hauptverzweigung enthält. Das ist natürlich nicht das was du willst.

Wenn Sie nur masterBackup Zweig Arbeit als Master Zweig möchten, können Sie es umbenennen, indem

git branch -m master master1 
git branch -m masterBackup master 

Nun ist die masterBackup ist Master Zweig ersetzen. Wenn Sie jedoch den lokalen Master-Zweig zum Remote-Master übertragen möchten, sollten Sie git push -f origin master verwenden.

0

Die sicherste Möglichkeit ist es, die Commits zurückzukehren, die auf Ihre master Zweig gemacht wurden nach das abgelöste geschieht begehen, wo alles richtig funktioniert:

git revert <SHA-1>^..HEAD # SHA-1 is the earliest commit you want gone 

Diese Option wird ein auf der Spitze master machen verpflichten die macht jedes der Commits im Bereich rückgängig. Danach sollte Ihr Zweig funktionell identisch mit dem sein, wo Sie ihn haben wollen.Sie können wie gewohnt weiterarbeiten und wie gewohnt drücken.

Aber Sie könnten auch die Geschichte von master umschreiben, wenn Sie wollten.

Warnung: Diese Option überschreibt den Verlauf Ihrer veröffentlichten master-Verzweigung und sollte daher nur in Betracht gezogen werden, wenn Sie mit den damit verbundenen Einschränkungen umgehen können.

Wenn Sie Ihren master Zweig zu einem früheren dauerhaft zurückzukehren begehen Sie die folgenden Schritte tun:

git checkout master 
git reset --hard <SHA-1 of earlier commit you want to keep> 

Dieser Ihren lokalen master Zweig so überschreiben, dass sein Kopf ist jetzt die frühere Funktion begehen.

Beachten Sie, dass dies die Geschichte des Fern master Zweig veröffentlicht ändern, so um die Fernbedienung zu aktualisieren, erhalten Sie eine Kraft Push über zu tun haben:

git push --force origin master