Bearbeiten Sie eine Commit-Nachricht in SourceTree Windows (bereits auf Remote übertragen).

202

Wie bearbeite ich eine falsche Festschreibungsnachricht in SourceTree, ohne die Befehlszeile zu berühren?

Weitere Details:

  • Dies ist nicht das letzte Commit.
  • Alles wurde bereits nach Bitbucket geschoben.
  • Dies ist ein privates Repository und ich bin der einzige Mitarbeiter.
  • Es macht mir nichts aus, die vorherigen Commits zu verlieren, da ich sie jederzeit erneut festschreiben kann.
  • Ich möchte jedoch keine jemals vorgenommenen Codeänderungen verlieren.

Ergebnis:

  • Da es Ihren Kommentaren und Antworten zufolge derzeit unmöglich erscheint, werde ich ein neues Repository erstellen und von vorne beginnen. Vielen Dank für Ihre Hilfe!
Gemeinschaft
quelle

Antworten:

425

Hier sind die Schritte zum Bearbeiten der Festschreibungsnachricht eines vorherigen Festschreibens ( das nicht das letzte Festschreiben ist ) mit SourceTree für Windows Version 1.5.2.0 :

Schritt 1

Wählen Sie das Commit unmittelbar vor dem Commit aus, das Sie bearbeiten möchten. Zum Beispiel, wenn ich das Commit mit der Meldung "FOOBAR!" dann muss ich das Commit auswählen, das direkt davor kommt:

Wählen Sie Commit vor demjenigen aus, den ich bearbeiten möchte.

Schritt 2

Klicken Sie mit der rechten Maustaste auf das ausgewählte Commit und klicken Sie auf Rebase children...interactively:

Wählen Sie "Kinder interaktiv neu starten".

Schritt 3

Wählen Sie das Commit aus, das Sie bearbeiten möchten, und klicken Sie dann Edit Messageunten. In diesem Fall wähle ich das Commit mit der Meldung "FOOBAR!" Aus:

Wählen Sie das Commit aus, das Sie bearbeiten möchten.

Schritt 4

Bearbeiten Sie die Festschreibungsnachricht und klicken Sie dann auf OK. In meinem Beispiel habe ich "SHAZBOT! SKADOOSH!"

Bearbeiten Sie die Commit-Nachricht

Schritt 5

Wenn Sie zum interaktiven Rebase-Fenster zurückkehren, klicken Sie auf OK, um die Rebase zu beenden:

Klicken Sie zum Abschluss auf OK.

Schritt 6

Zu diesem Zeitpunkt müssen Sie Ihre neuen Änderungen erzwingen, da Sie bereits übertragene Commits neu basiert haben. In der aktuellen Version 1.5.2.0 von SourceTree für Windows können Sie die GUI jedoch nicht erzwingen. Daher müssen Sie Git sowieso über die Befehlszeile verwenden, um dies zu tun.

Klicken Sie Terminalin der GUI auf, um ein Terminal zu öffnen.

Klicken Sie auf Terminal

Schritt 7

Drücken Sie vom Terminal aus mit dem folgenden Befehl:

git push origin <branch> -f

Wo <branch>ist der Name des Zweigs, den Sie pushen möchten, und -fbedeutet, den Push zu erzwingen. Der Force Push überschreibt Ihre Commits auf Ihrem Remote-Repo, aber das ist in Ihrem Fall in Ordnung, da Sie gesagt haben, dass Sie Ihr Repo nicht mit anderen Personen teilen.

Das ist es! Du bist fertig!


quelle
4
Die Schritte sind auch bei der Mac-Version grundsätzlich gleich.
Race_Carr
2
Achtung: Wenn Sie Ihre Commit-Nachricht mit # starten möchten, funktioniert dies nicht. Git behandelt sie als Kommentar und teilt Ihnen mit, dass Ihre Commit-Nachricht leer ist.
Daniel Edholm Ignat
1
"Das war's! Du bist fertig!" - Es ist so einfach, dass ich nicht weiß was, wie ein Fang ein Kaninchen sein kann. Anstatt eine Programmfunktion zu erstellen, für eine so wichtige und oft sehende Situation. Wenn Sie gerade in Eile Tippfehler gemacht haben, müssen Sie den Kopf zurücksetzen und erneut ein neues Commit erstellen.
Rantiev
67
Witzig - ich frage mich, warum sie keine einfache Option "Commit-Nachricht bearbeiten" erstellen.
Jonathan Aquino
1
Force Push ist jetzt über die GUI verfügbar. Ansonsten PERFEKT :-)
LaTisha
43

In Version 1.9.6.1. Für UnPushed Commit.

  1. Klicken Sie auf die zuvor festgeschriebene Beschreibung
  2. Klicken Sie auf das Commit-Symbol
  3. Geben Sie eine neue Festschreibungsnachricht ein und wählen Sie " Letzte Festschreibung ändern " aus der Dropdown- Liste " Festschreibungsoptionen ".
  4. Übernehmen Sie Ihre Nachricht.
Franc
quelle
13

Wenn die Kommentarmeldung nicht englische Zeichen enthält, werden diese Zeichen mithilfe der von user456814 bereitgestellten Methode durch Fragezeichen ersetzt. (getestet unter Sourcetree Ver2.5.5.0)

Also muss ich die folgende Methode anwenden.

VORSICHT : Wenn das Commit von anderen Mitgliedern gezogen wurde, können die folgenden Änderungen Chaos für sie verursachen.

Schritt 1 : Suchen Sie im Sourcetree-Hauptfenster Ihre Repo-Registerkarte und klicken Sie auf die Schaltfläche " Terminal ", um die Git-Befehlskonsole zu öffnen.

Schritt 2 :

[Situation A] : Das Ziel-Commit ist das neueste.

1) Geben Sie in der git-Befehlskonsole ein

git commit --amend -m "new comment message"

2) Wenn das Ziel-Commit auf Remote übertragen wurde, müssen Sie erneut mit Gewalt drücken. Geben Sie in der git-Befehlskonsole ein

git push --force

[Situation B] : Das Ziel-Commit ist nicht das neueste.

1) Geben Sie in der git-Befehlskonsole ein

git rebase -i HEAD~n

Es ist die neuesten n Commits zu quetschen. Wenn Sie beispielsweise die Nachricht vor der letzten bearbeiten möchten, ist n 2. Dieser Befehl öffnet ein vi-Fenster, das erste Wort jeder Zeile lautet " pick " und Sie ändern "pick" in " reword " für die Zeile Sie möchten bearbeiten. Geben Sie dann ein, :wqum das vi-Fenster zu speichern und zu beenden. Jetzt wird ein neues vi-Fenster geöffnet, in das Sie Ihre neue Nachricht eingeben. Auch :wqzum Speichern und Beenden verwenden.

2) Wenn das Ziel-Commit auf Remote übertragen wurde, müssen Sie erneut mit Gewalt drücken. Geben Sie in der git-Befehlskonsole ein

git push --force


Schließlich : Drücken Sie im Hauptfenster des Quellenbaums F5zum Aktualisieren auf.

Hosi Golden
quelle
12

Aktualisieren

Hinweis: Diese Antwort wurde ursprünglich in Bezug auf ältere Versionen von SourceTree für Windows geschrieben und ist jetzt veraltet.

Siehe meine neue Antwort für die aktuelle Version von SourceTree für Windows, 1.5.2.0 . Ich lasse diese Antwort aus historischen Gründen zurück.

Ursprüngliche Antwort

Da ich unter Windows bin, habe ich weder ein Befehlszeilentool noch weiß ich, wie man eines verwendet :( Ist dies die einzige Möglichkeit, dies zu klären? Die GUI deckt nicht alle Funktionen des Git ab? - Original Poster

Nein, Git-GUIs decken nicht alle Funktionen von Git ab . Sie kommen nicht einmal nahe . Ich schlage vor, Sie lesen eine der Antworten in Wie bearbeite ich eine falsche Commit-Nachricht in Git? Git ist flexibel genug, dass es mehrere Lösungen gibt ... über die Befehlszeile.

SourceTree wird möglicherweise bereits mit der msysgit-Bash-Shell geliefert, oder es kann möglicherweise die Standard-Windows-Befehlsshell verwenden. In beiden Fällen öffnen Sie es in SourceTree, indem Sie auf die Schaltfläche Terminal klicken:

Geben Sie hier die Bildbeschreibung ein

Hier legen Sie fest, welches Terminal SourceTree verwendet (Bash oder Windows):

Geben Sie hier die Bildbeschreibung ein

Eine Möglichkeit, das Problem in SourceTree zu lösen

Abgesehen davon, hier ist eine Möglichkeit, wie Sie dies in SourceTree tun können. Da Sie in den Kommentaren erwähnt haben, dass es Ihnen nichts ausmacht, "zum fehlerhaften Commit zurückzukehren" (womit Sie vermutlich das Zurücksetzen meinen, was in Git eine andere Operation ist), sind hier die Schritte:

  1. Führen Sie in SourceTree einen Hard-Reset für das fehlerhafte Commit durch, indem Sie mit der rechten Maustaste darauf klicken Reset current branch to this commitund die Hard-Reset-Option aus der Dropdown- Liste auswählen und auswählen.Geben Sie hier die Bildbeschreibung ein
  2. Klicken Sie dann auf die Schaltfläche Festschreiben
  3. Klicken Sie unten auf das Kontrollkästchen "Letztes Commit ändern". Geben Sie hier die Bildbeschreibung ein
  4. Nehmen Sie die gewünschten Änderungen an der Nachricht vor und klicken Sie erneut auf Festschreiben. Voila!

Zu diesem Kommentar :

Wenn dies nicht möglich ist, weil es bereits an Bitbucket gesendet wurde, würde es mir nichts ausmachen, ein neues Repository zu erstellen und von vorne zu beginnen.

Bedeutet das, dass Sie die einzige Person sind, die am Repo arbeitet? Dies ist wichtig, da es nicht trivial ist, den Verlauf eines Repos zu ändern (z. B. durch Ändern eines Commits), ohne Ihren Mitarbeitern Probleme zu bereiten. Angenommen, Sie sind die einzige Person, die am Repo arbeitet, dann möchten Sie als Nächstes Ihren geänderten Verlauf zwangsweise auf die Fernbedienung übertragen.

Beachten Sie jedoch, dass Sie durch erzwungenes Drücken alle Arbeiten ausführen, die zuvor ausgeführt wurden, da Sie das fehlerhafte Festschreiben hart zurückgesetzt haben. Wenn das in Ordnung ist, müssen Sie möglicherweise den folgenden Befehl in der Befehlszeile verwenden, um den Force-Push auszuführen, da ich in SourceTree keine Option dafür gefunden habe:

git push remote-repo head -f

Dies setzt auch voraus, dass Sie mit BitBucket Push auf ein Repo erzwingen können.

Sie sollten jedoch trotzdem über die Befehlszeile lernen, wie man Git verwendet. Dadurch werden Sie mit Git besser vertraut. #ProTip, verwenden Sie msysgit und aktivieren Sie den Schnellbearbeitungsmodus in den Terminaleigenschaften, sodass Sie doppelklicken können, um eine Textzeile hervorzuheben, mit der rechten Maustaste zum Kopieren klicken und zum Einfügen erneut mit der rechten Maustaste klicken. Es ist ziemlich schnell.

Gemeinschaft
quelle