Neu bei git und schon durcheinander.
Ich habe einige Änderungen an einem Remote-Entwicklungscomputer vorgenommen und vorgenommen. Ich muss eine ältere Version wiederherstellen, aber den bisherigen "schlechten Fortschritt" beibehalten, um weiterhin an einem separaten Zweig zu arbeiten.
Ich dachte, es so zu machen:
- Erstellen Sie einen lokalen Zweig mit dem Namen: "getestete Sache"
- Setzen Sie das lokale Repository auf den Zustand zurück, in dem es funktioniert hat (hoffentlich helfen sinnvolle Commits) .
Zur Fernbedienung drücken
Beende die Tests an der getesteten Sache
- Füge "getestetes Ding" in dev ein
- Zur Fernbedienung drücken
Zwischen den Schritten 3 und 5 können sich andere Entwickler verpflichten und pushen, und ich befürchte, dass dies zu einer "Merge-Tragödie" führen kann.
AKTUALISIEREN:
Das Hauptproblem liegt hier bei 2)
Hier zum Thema: "Arbeit in einen Themenzweig aufteilen" http://learn.github.com/p/undoing.html
Sie schlagen vor:
- $ git Branch Test
- $ git reset --hard a6b4c974
Auf diese Weise könnten andere Entwickler noch:
$ git commit
(auf dem Dev-Zweig)
und ich kann auschecken, um es zu testen und bis zur Zusammenführungszeit auszuarbeiten .
Trotz all Ihrer Möglichkeiten scheint dies ein guter Ansatz zu sein. Es ist jedoch nicht angegeben, ob dies möglich ist, nachdem wir gepusht haben?
Bitte beachten Sie Folgendes: Seit ich diese Änderungen vorgenommen habe und alles durcheinander gebracht habe, hat bisher noch niemand am Repository gearbeitet . Wenn ich also das Arbeitsverzeichnis zurücksetze, wird es niemand bemerken.
quelle
git reset --hard <last_good_commit>
?<first_bad_commit>
..<last_bad_commit>
, sondern<last_good_commit>
..<last_bad_commit>
Wenn Sie bereits Dinge auf einen Remote-Server übertragen haben (und andere Entwickler an demselben Remote-Zweig arbeiten), ist es wichtig zu beachten, dass Sie den Verlauf nicht neu schreiben möchten
Verwenden Sie nicht git reset --hard
Sie müssen Änderungen rückgängig machen, andernfalls werden sie beim Auschecken, bei dem die Commits entfernt wurden, beim nächsten Push wieder zum Remote-Repository hinzugefügt. und jede andere Kasse zieht sie beim nächsten Zug danach ein.
Wenn Sie keine Änderungen an eine Fernbedienung übertragen haben, können Sie diese verwenden
Wenn Sie haben gedrückt Veränderungen, aber sind sicher , niemand sie gezogen hat , kann man verwenden
Wenn Sie haben Änderungen gedrückt, und jemand hat sie in ihre Kasse gezogen können Sie es immer noch , aber das andere Team-Mitglied / Kasse collaborate brauchen würde:
Aber im Allgemeinen wird das zu einem Chaos. Also zurücksetzen:
Die zu entfernenden Commits sind die letzten
Dies ist möglicherweise der häufigste Fall. Sie haben etwas getan - Sie haben sie herausgeschoben und dann festgestellt, dass sie nicht existieren sollten.
Zuerst müssen Sie das Commit identifizieren, zu dem Sie zurückkehren möchten. Dies können Sie tun mit:
Suchen Sie einfach vor Ihren Änderungen nach dem Commit und notieren Sie sich den Commit-Hash. Sie können das Protokoll mithilfe des
-n
Flags auf die am häufigsten erneut gesendeten Commits beschränken :git log -n 5
Setzen Sie dann Ihren Zweig auf den Status zurück, den Ihre anderen Entwickler sehen sollen:
Der letzte Schritt besteht darin, einen eigenen lokalen Zweig zu erstellen, in dem die zurückgesetzten Änderungen erneut angewendet werden:
Arbeiten
my-new-branch
Sie weiter, bis Sie fertig sind, und führen Sie es dann in Ihrem Hauptentwicklungszweig zusammen.Die zu entfernenden Commits werden mit anderen Commits vermischt
Wenn die Commits, die Sie zurücksetzen möchten, nicht alle zusammen sind, ist es wahrscheinlich am einfachsten, sie einzeln zurückzusetzen. Verwenden Sie erneut
git log
find die Commits, die Sie entfernen möchten, und dann:Erstellen Sie dann erneut Ihren Zweig, um Ihre Arbeit fortzusetzen:
Dann hacken Sie weg und verschmelzen Sie, wenn Sie fertig sind.
Sie sollten am Ende einen Commit-Verlauf haben, der so aussieht
my-new-branch
Better way®
Insbesondere jetzt, da Sie sich der Gefahren mehrerer Entwickler bewusst sind, die in derselben Branche arbeiten, sollten Sie Feature-Zweige immer für Ihre Arbeit verwenden. Das bedeutet nur, dass Sie in einem Zweig arbeiten, bis etwas fertig ist, und es erst dann mit Ihrem Hauptzweig zusammenführen. Erwägen Sie auch die Verwendung von Tools wie git-flow, um die Erstellung von Zweigen auf konsistente Weise zu automatisieren.
quelle
git reset
ohne das Flag --hard, aber ich glaube nicht, dass die meisten Leute verstehen werden, dass Sie sowohl das Arbeitsverzeichnis als auch HEAD zurücksetzen, was zu einem! [rejected] master -> master (non-fast-forward)
Push führen wird. Wenn viele Dateien geändert wurden, ist dies ein wirklich umfassender Patch, selbst wenn Sie das Festschreiben erzwingen.git reset --hard
in Ihrem Feature-Zweig verwenden, werden Sie beim Zusammenführen höchstwahrscheinlich Konflikte bekommen, wenn die von Ihnen entfernten Commits erneut angewendet werden - im Grunde ist es wahrscheinlich keine gute Idee, dies zu tun.In der obigen Codezeile. "Letztes Argument repräsentiert"
oder
quelle
-m
tatsächlich gibt an Mutter welche Commit vom m ainline Zweig.-m 2
würde Sie auf die Version an der Spitze Ihres Feature-Zweigs zurücksetzen und alle Änderungen an der Hauptlinie verwerfen, da Ihr Feature-Zweig von der Hauptlinie abweicht.