web-dev-qa-db-ger.com

Beginnen Sie eine Git-Commit-Nachricht mit einem Hash-Zeichen (#)

Git behandelt Zeilen, die mit # Beginnen, als Kommentarzeilen beim Festschreiben. Dies ist sehr ärgerlich, wenn Sie mit einem Ticketverfolgungssystem arbeiten und versuchen, die Ticketnummer am Anfang der Zeile zu schreiben, z.

#123 salt hashed passwords

git entfernt einfach die Zeile aus der Commit-Nachricht. Gibt es eine Möglichkeit, dem Hasch zu entkommen? Ich habe versucht \ und !, aber nichts funktioniert. Leerzeichen vor # bleiben erhalten, daher sind sie auch keine funktionierende Lösung für das Problem.

256
knittl

Dieses Verhalten ist Teil des standardmäßigen Aufräumverhaltens von git commit. Wenn Sie Zeilen behalten möchten, die mit # Beginnen, können Sie einen alternativen Bereinigungsmodus verwenden.

Z.B.

git commit --cleanup=whitespace

Wenn Sie dies tun, müssen Sie vorsichtig sein, um alle # - Zeilen zu entfernen, die nicht im Commit erscheinen sollen.

209
CB Bailey

Beachten Sie, dass Sie seit git1.8.2 (February 2013) ein anderes Zeichen als '#' Für die kommentierte Zeile in der Festschreibungsnachricht verwenden können.

Dies ermöglicht Ihnen, '#' Als Referenz für die Fehlernummer zu verwenden.

Verschiedene "Hinweis" -Zeilen, die Git ausgibt, wenn der Benutzer aufgefordert wird, Nachrichten im Editor zu bearbeiten, werden standardmäßig mit "#" Auskommentiert.

Die Konfigurationsvariable core.commentChar kann verwendet werden, um '#' An ein anderes Zeichen anzupassen.


Theoretisch können Sie könnte ein core.commentChar - Wort (mehrere Zeichen) eingeben, aber git 2.0.x/2.1 wird strenger sein (Q3 2014).

Siehe commit 50b54fd von Nguyễn Thái Ngọc Duy (pclouds :

config: Seien Sie streng auf core.commentChar

Wir unterstützen nicht comment strings (zumindest noch nicht). Die Mehrbyte-Zeichencodierung kann ebenfalls falsch interpretiert werden.

Der Test mit zwei Kommas wird aktualisiert, da dies verletzt wird. Es wurde mit dem Patch führt core.commentChar In eff80a9 ein (Benutzerdefiniertes "Kommentarzeichen" zulassen - 2013-01-16) hinzugefügt. Mir ist nicht klar, warum welches Verhalten gewünscht wird.


git 2.0.x/2.1 (Q3 2014) fügt eine automatische Auswahl für core.commentChar hinzu:
Siehe commit 84c9dc2

Wenn core.commentChar "auto" ist, beginnt das Kommentarzeichen standardmäßig mit "#". Wenn es jedoch bereits in der vorbereiteten Nachricht enthalten ist, suchen Sie ein anderes Zeichen in einer kleinen Teilmenge. Dies sollte keine Überraschungen bereiten, da Git einige Zeilen unerwartet entfernt.

Beachten Sie, dass git nicht intelligent genug ist, um '#' Als Kommentarzeichen in benutzerdefinierten Vorlagen zu erkennen und es zu konvertieren, wenn sich das letzte Kommentarzeichen unterscheidet.
Es werden "#" - Zeilen in benutzerdefinierten Vorlagen als Teil der Festschreibungsnachricht berücksichtigt. Verwenden Sie dies also nicht mit benutzerdefinierten Vorlagen.

Die Liste der Kandidaten für "auto" sind:

# ; @ ! $ % ^ & | :

Dies bedeutet, dass ein Befehl wie git commit -m '#1 fixed issue' Das commentChar automatisch auf ';' Umschaltet, da '#' In der Festschreibungsnachricht verwendet wurde.

120
VonC

Die Antworten hier sind gut und detailliert, aber für einen GIT-Neuling wie mich ist das Anpassen der GIT-Konfigurationsoptionen nicht so offensichtlich. Hier ist ein Beispiel zum Ändern von # bis ; für Kommentarzeichen:

git config core.commentChar ";"

Das ist alles was Sie tun müssen.

72
Matthieu Napoli

Sie können die Befehlszeilenoption -m Verwenden:

git commit -m "#123 fixed"
60
Olivier Verdier

Wenn Sie eine interaktive Rebase durchführen, wird beim Speichern der Commit-Nachricht nichts darin enthalten sein (da das # am Anfang hat es zu einem Kommentar gemacht und wurde ignoriert) git zeigt dir, was zu tun ist:

Aborting commit due to empty commit message.
Could not amend commit after successfully picking 5e9159d9ce3a5c3c87a4fb7932fda4e53c7891db... 123 salt hashed passwords
This is most likely due to an empty commit message, or the pre-commit hook
failed. If the pre-commit hook failed, you may need to resolve the issue before
you are able to reword the commit.
You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

Also, ändern Sie einfach die Nachricht:

git commit --amend -m "#123 salt hashed passwords"

und weiter rebase:

git rebase --continue
30
Owain Williams

git commit --cleanup=scissors sollte benutzt werden. Es wurde zu Git v2.0. am 21.05.2014 hinzugefügt

von git commit --help

--cleanup=<mode>
  scissors
    Same as whitespace, except that everything from (and including) the line
    "# ------------------------ >8 ------------------------" is truncated if the message
    is to be edited. "#" can be customized with core.commentChar.
22
Sungam

Verwenden Sie ein anderes Präfix für die Ticketnummer. Oder stellen Sie der Ticketnummer ein Wort voran, z. B. "Bug # 42". Oder stellen Sie der Zeile ein einzelnes Leerzeichen voran. Wenn Sie dieses Leerzeichen entfernen möchten, können Sie dafür einen Commit-Hook hinzufügen.

Ich persönlich würde diese Art der Manipulation von Commit-Nachrichten lieber nicht von einem Hook ausführen lassen, da sie sehr irritierend sein kann, wenn sie ausgelöst werden, wenn Sie dies nicht möchten. Die einfachste Lösung ist wahrscheinlich, das Problem zu überdenken.

3
wilhelmtell

Alle meine Commits beginnen mit #issueNumber also setze ich diesen Kessel auf meinen vim .git/hooks/commit-msg:

NAME=$(git branch | grep '*' | sed 's/* //') 
echo "$NAME"' '$(cat "$1") > "$1"

Nehmen wir also an, wir haben einen Zweig #15 und wir machen eine Commit-Nachricht add new awesome feature. Bei diesem Ansatz lautet die endgültige Festschreibungsmeldung #15 add new awesome feature.

1
valignatev