Mercurial - Mehrere Commits zu einem Commit zusammenfügen
Nehmen wir an, dass man in einem lokalen Mercurial-Repository mehrere kleine Commits erstellt hat. Nun will man nicht jeden dieser Commits pushen, sondern aus mehreren kleinen Commits vorher einen größeren Commit erstellen.
Gehen wir von folgendem fiktiven Beispiel aus.
hg log -v -l 2
Änderung: 408:f5a5d6c7d965
Lesezeichen: main
Marke: tip
Nutzer: Fryboyter <hg@fryboyter.de>
Datum: Sun Jul 31 15:47:53 2022 +0200
Dateien: README.md
Zusammenfassung: Fügt einen Text hinzu
Änderung: 407:6d5f6ac48ddb
Nutzer: Fryboyter <hg@fryboyter.de>
Datum: Sun Jul 31 15:47:31 2022 +0200
Dateien: README.md
Zusammenfassung: Fügt eine Überschrift hinzu
Wie man sieht, beziehen sich die letzten beiden Commits auf einfache Änderungen in der gleichen Datei, für die ein Commit gereicht hätte. Also machen wir doch einfach aus den zwei Commits einen einzelnen Commit.
Hierfür habe ich mich für histedit entschieden. Hierbei handelt es sich nicht um ein externes Plugin wie hg-git, sondern um eine Funktion die Mercurial von Haus aus bietet. Diese muss man allerdings erst aktivieren. Hierfür reicht es aus in der Konfigurationsdatei hgrc unter [extensions] histedit = einzutragen. Also beispielsweise wie folgt.
[extensions]
hggit = ~/repository/hg-git/hggit
histedit =
Will man nun beispielsweise die beiden letzten Commits zusammenfuegen, führt man den Befehl hg histedit -r -2. Nun sollte man eine Anzeige, ähnlich der folgenden erhalten.
?: help, k/up: move up, j/down: move down, space: select, v: view patch
d: drop, e: edit, f: fold, m: mess, p: pick, r: roll
pgup/K: move patch up, pgdn/J: move patch down, c: commit, q: abort
Older commits are shown above newer commits.
#0 pick 407:6d5f6ac48ddb 407 Fügt eine Überschrift hinzu
#1 pick 408:f5a5d6c7d965 408 Fügt einen Text hinzu
changeset: 408:f5a5d6c7d965
user: Fryboyter <hg@fryboyter.de>
bookmark: main
summary: Fügt einen Text hinzu
files: README.md
no overlap
Wir möchten nun, dass Commit #1 Teil von Commit #0 wird, sodass wir diesen pushen können. Hierfür wählen wir den Commit #1 aus und drücken auf der Tastatur f. In der betreffenden Zeile sollte anstelle von pick nun ^fold angezeigt werden. Abschließend drücken wir auf der Tastatur noch c. Nun ändert man die Commit-Nachricht ab und speichert sie.
Führt man nun hg log -v -r 2 aus, sollte der Commit #1 nicht mehr angezeigt werden und beim Commit #0 sollte die neue Commit-Nachricht angezeigt werden. Führt man hg diff -c tip aus, sollte der Commit auch beide Änderungen enthalten. Bei “tip” handelt es sich übrigens um den letzten vorhandenen Commit.
Diese Artikel könnten auch interessant sein:
- Mercurial - Lokale Änderungen in zweites lokales Repository übertragen
- Github mit Mercurial nutzen
- Heptapod - Gitlab mit Unterstützung von Mercurial
- Bitbucket verabschiedet sich von Mercurial
- Hooks unter Mercurial