Git behandelt Zeilen, die mit beginnen #
, beim Festschreiben als Kommentarzeilen. Dies ist sehr ärgerlich, wenn Sie mit einem Ticket-Tracking-System arbeiten und versuchen, die Ticket-Nummer 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 Hash zu entkommen? Ich habe es versucht \
und !
, aber nichts funktioniert. Whitespaces zuvor #
bleiben erhalten, sodass sie auch keine funktionierende Lösung für das Problem darstellen.
git
commit
ticket-system
ticket-tracking
stricken
quelle
quelle
git config core.commentchar
die Konfiguration dieses Kommentarzeichens. Siehe meine Antwort untengit commit --cleanup=scissors
wird flexibler. Siehe Detail in meiner AntwortAntworten:
Dieses Verhalten ist Teil des
git commit
Standardverhaltens für die Bereinigung. Wenn Sie die Zeilen beginnen lassen möchten, können#
Sie einen alternativen Bereinigungsmodus verwenden.Z.B
Wenn Sie dies tun, müssen Sie darauf achten, alle
#
Zeilen zu entfernen , die nicht im Commit angezeigt werden sollen.quelle
commit.template
Git-Konfigurationsvariablen gesteuert .git commit --amend --cleanup=whitespace
Beachten Sie, dass Sie seit git1.8.2 (Februar 2013) ein anderes Zeichen als '
#
' für die kommentierte Zeile in der Festschreibungsnachricht verwenden können .Auf diese Weise können Sie '
#
' als Referenz für die Fehlernummer verwenden.Theoretisch könnten Sie ein
core.commentChar
Wort (mehrere Zeichen) eingeben, aber Git 2.0.x / 2.1 wird strenger (Q3 2014).Siehe Commit 50b54fd von Nguyễn Thái Ngọc Duy (
pclouds
) :config: Seien Sie streng bei core.commentChar
Git 2.0.x / 2.1 (Q3 2014) fügt eine automatische Auswahl hinzu für
core.commentChar
:Siehe Commit 84c9dc2
Die Liste der Kandidatenzeichen für "auto" lautet:
Das bedeutet, dass ein Befehl wie
git commit -m '#1 fixed issue'
das commentChar automatisch auf ';
' umschaltet , da '#
' in der Festschreibungsnachricht verwendet wurde.quelle
$ git config --global core.commentchar ';'
git config --global core.commentChar auto
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
#
zu;
für Kommentarzeichen:Das ist alles was Sie tun müssen.
quelle
git commit
den konfigurierten Editor bearbeiten zu öffnen , eine Nachricht zu begehen!git -c core.commentChar="|" commit --amend
(Ersetzen Sie sie|
durch das, was Sie möchten).Sie können die Befehlszeilenoption verwenden
-m
:quelle
Wenn Sie eine interaktive Rebase durchführen, zeigt Ihnen git, wenn Sie Ihre Commit-Nachricht mit nichts darin speichern (da sie
#
am Anfang zu einem Kommentar gemacht wurde und daher ignoriert wurde), was zu tun ist:Ändern Sie einfach die Nachricht:
und setzen Sie die Rebase fort:
quelle
git commit --cleanup=scissors
sollte benutzt werden. Es wurde am 21.05.2014 zu Git v2.0.0 hinzugefügtvon
git commit --help
quelle
commit.cleanup = whitespace
und zu entfernen# …
, wie @CharlesBailey bereits vorgeschlagen hat.scissors
-mode bereinigt nur zusätzlich die vongit
format-patch
/mailinfo
/ verwendete Scherensyntaxam
; es ist nicht die Verwendung…-- >8 --…
Syntax , wenn Kommentar Hinzufügen von Nachrichten zu begehen .# ...
Kommentar nicht " hart " entfernen muss . 2. Ich bin mir beim zweiten Teil Ihres Kommentars nicht so sicher, derscissors
Modus ist definitiv in dergit commit --help
. Welche Version von verwendengit
Sie? @ SlippD.Thompsonwhitespace
Der Modus bietet das Entfernen von 1. führenden und nachfolgenden Leerzeilen, 2. nachfolgenden Leerzeichen und 3. Reduzieren aufeinanderfolgender Leerzeilen.scissors
bietet das Entfernen von 1. führenden und nachfolgenden Leerzeilen, 2. nachfolgenden Leerzeichen, 3. Reduzieren aufeinanderfolgender Leerzeilen, 4. alles von (und einschließlich) der Zeile# -…- >8 -…-
. Scherenlinien (# -…- >8 -…-
) werden jedoch nur bei Verwendung vongit-format-patch
/mailinfo
/ eingefügtam
. Daher bietet der Abisoliermodus für einen normalengit-commit
/merge
/rebase
/cherry-pick
Workflowscissors
keine Vorteile gegenüber demwhitespace
Modus. v2.11.0git commit --cleanup=scissors
stelle die# ------------------------ >8 ------------------------
Zeile vor diegit status
Info. Wie unten: `# ------------------------> 8 ------------------- ----- # Berühren Sie nicht die obige Linie. # Alles unten wird entfernt. # Auf dem Zweigmaster # # Erstes Festschreiben # # Zu übernehmende Änderungen: # Neue Datei: .gitignore `# ------------------------ >8 ------------------------
vor dem Status txt "Es sieht so aus, als ob Sie ..." _ ein, wenn Sie verwendenscissors
; Es wird jedoch die Scherenlinie nach dem# Conflicts: …
Text eingefügt. Ich hattecommit.status = false
in meinem festgelegt.gitconfig
, so dass ich keinen Statustext sah, nur den Konflikttext. Ich stehe korrigiert; zu upvote wechseln.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 dies sehr irritierend sein kann, wenn es ausgelöst wird, wenn Sie es nicht möchten. Die einfachste Lösung besteht wahrscheinlich darin, das Problem zu überdenken.
quelle
#xxx
Auftreten irgendwo in der Festschreibungsnachricht mit dem Problem verknüpft. Es muss nicht zu Beginn des Commits sein. Vielleicht hat sich das in den letzten fünf Jahren geändert?Alle meine Commits beginnen mit,
#issueNumber
also lege ich diese Boilerplate auf meinevim .git/hooks/commit-msg
:Nehmen wir also an, wir haben einen Zweig
#15
und machen eine Commit-Nachrichtadd new awesome feature
. Mit diesem Ansatz wird die endgültige Festschreibungsnachricht sein#15 add new awesome feature
.quelle