Nachdem ich eine Zusammenführung vom origin/base
Zweig in meinen feature
Zweig gemacht hatte, musste ich einen Konflikt in der Datei Parameter.java
lösen. Ich habe mein Git Merge Tool gestartet und es gelöst. Sobald es gelöst wurde, führte ich eine git commit
aus und das öffnete Vim mit der Standard-Merge-Commit-Nachricht.
Tatsache ist, dass diese Standard-Commit-Nachricht die Liste der Konflikte enthält, aber beginnend mit #
, deshalb werden sie in der Commit-Nachricht ignoriert.
Gibt es eine Config, die hinzugefügt werden muss, um diese Konfliktlinien automatisch in die Commit-Nachricht einzufügen? Entfernen Sie daher #
für die in Konflikt stehenden Dateien im Conflicts
-Teil?
Sie können dazu den prepare-commit-msg
Hook verwenden.
Kopieren Sie .git/hooks/prepare-commit-msg.sample
in .git/hooks/prepare-commit-msg
Das Beispiel darin fügt # dem Konfliktteil tatsächlich # hinzu:
%Vor% Dieser Hook ist sinnvoll, weil frühere Versionen dies standardmäßig getan haben (wie in Linux git version 1.7.10.4
).
Nun möchten Sie genau das Gegenteil tun: #
im Conflicts-Teil entfernen. In der Tat, der git version 2.6.2.windows.1
gibt standardmäßig den Conflicts-Teil aus, so dass Sie einfach den Befehl in prepare-commit-msg
mit:
Ich verwende das, was sed
Bereiche nach Mustern verwendet (und basiert auf jthills Antwort )
In menschlicher Sprache lesen: Entfernen Sie im Zeilenbereich zwischen # Conflicts:
und #
oder (blank line)
die vorherige #(space)
oder #
( # \?
).
prepare-commit-msg hook:
%Vor%was zu
führt %Vor% Sie müssen es nicht selbst zur Commit-Nachricht hinzufügen. Sobald Sie ein Merge-Commit durchgeführt haben, sagt git Ihnen, wo es Konflikte gab. Führen Sie einfach einen git show --name-only [commit sha]
bei einem Commit aus, bei dem es sich um eine Zusammenführung mit Konflikten handelt, und Sie sehen sie als Teil der Nachricht.