2015-09-04 9 views
9

Aus Versehen habe ich einen Commit gemacht, den ich jetzt aus dem Verlaufsprotokoll löschen und zu einem vorherigen Commit zurückkehren möchte. Ich habe versucht, das Commit zu checken, zu dem ich zurückkehren möchte, aber Smartgit bittet mich, einen lokalen Zweig zu erstellen, um dies zu tun (Screenshot beigefügt) und da ich kein Experte mit SG bin, brauche ich wirklich einen Rat. Ich habe auch versucht, das Commit, das ich aus Versehen gemacht habe, rückgängig zu machen, aber ich sehe immer noch das Commit auf dem Log. Dies ist, wie das Protokoll sehen jetzt:smartgit delete commit und zurück zum vorherigen Commit

Beim Versuch, zur Kasse:

enter image description here

Wie mein Log im Moment aussieht:

enter image description here

Was ich tun möchte, ist löschen Die ersten beiden Commits gehen aus dem Log und kehren zum "Cambios Varios" Commit zurück (der mit dem grünen Pfeil, den ich beim Versuch, diesen Commit auszuprobieren, angezeigt habe).

Dieses ganze Chaos war, weil mein Kollege einige Änderungen vornahm und eine Datei hinzufügte und dann seine Änderungen festlegte, um meine Dateien zu aktualisieren, machte ich einen Zug, aber meine Dateien wurden nicht auf meinem lokalen Repository aktualisiert und nicht hinzugefügt die Datei, die von meinem Kollegen hinzugefügt wurde. Gibt es noch etwas, das ich tun muss, um alle meine Ordner zu aktualisieren, wenn ein anderer Benutzer außer PULL ein Commit durchführt? Ich bin ziemlich neu in SmartGit und es ist irgendwie verwirrend, wenn ich versuche, einen sauberen Zug zu machen. Danke vielmals !

Antwort

8

Was Sie fragen, ist nicht spezifisch für SmartGit, sondern für GIT im Allgemeinen. SmartGit ist lediglich ein Client, obwohl sehr praktisch und voll ausgestattet. In Ihrer Situation müssen Sie in mehr GIT Funktionen berücksichtigen:

  1. Branchen
  2. Veröffentlicht begehen
  3. Freistehendes Kopf
  4. Fern Geschichte Umschreiben

Google auf diesem zusätzliche Informationen zu erhalten. Nun lassen Sie uns Namen zu Ihrer Commits geben:

enter image description here

Sie weiter, um zu sehen A zu begehen, weil Sie einen Zweig zeigt auf ihn haben. Dies ist Ihr lokaler Zweig master. Sie können diesen Zweig zu was auch immer verpflichten Sie mögen. In SmartGit klicken Sie dazu einfach auf das grüne Zweig-Label und ziehen es auf ein anderes Commit. Das ist es. Z.B. Setzen Sie es auf commit B zurück, wo origin/master verweist, und Sie werden dieses Commit in Ihrem Protokoll nicht mehr sehen, da es keinen Zweig gibt, aus dem es erreicht werden kann.

Genau genommen können Sie den gleichen Trick mit Ihrem Zweig origin/master ausführen, Sie können ihn auf ein anderes Commit zurücksetzen. Aber du solltest sehr vorsichtig damit sein, denn es zeigt auf einen commit B, der veröffentlicht ist. I.e. Jeder kann es an ihrer Maschine ziehen lassen. Wenn Sie nicht sicher sind, können Sie den Zweig nicht von einem veröffentlichten Commit zurücksetzen, ohne Gefahr zu laufen, die Kopie des Repos zu beschädigen.

Also die einfache Antwort ist, Sie können nicht das Repo auf das Commit C, wie Sie wollen, zurück, weil es Konflikt mit Repos auf anderen Maschinen geklont werden kann. Die längere Antwort ist, dass Sie es versuchen können.

Wenn Sie sicher sind, dass die einzigen Personen, die dieses Repo geklont haben, Sie und Ihr Kollege sind, können Sie das Remote-Protokoll neu schreiben. Setzen Sie dazu Ihre lokale master Verzweigung auf Commit C (mit Drag & Drop, wie ich zuvor sagte) und Push es. SmartGit kann dies verbieten, gehen Sie zu Einstellungen/Befehle/Push und aktivieren Sie die Option "Push-Commits modifizieren". Weil es gefährlich ist.

Dies wird die Position der remote master Zweig neu schreiben, ziehen Sie es von der Maschine Ihres Kollegen. Wenn er in dieser Branche keine weiteren Änderungen vorgenommen hat, sollte dies in Ordnung sein.

+0

"Weil es gefährlich ist." Bedeutet, dass es Verwirrung verursachen kann, nicht, dass es irgendetwas brechen kann, richtig? – endolith

+1

@endolith Ja, es wird nicht GIT Repository selbst brechen, Sie können es nicht so leicht brechen. – Mikhail

+0

danke @Mikhail, es ist sehr hilfreich – Ismoh