Warum fordert mich git zu einer Commit-Nachricht nach dem Zusammenführen auf?

142

Vor kurzem hat git pullgit begonnen, meinen Texteditor zu spawnen und nach einer Merge-Commit-Nachricht zu fragen. Eine Commit-Nachricht ist bereits vorab ausgefüllt, und ich muss nur das Fenster speichern und schließen, um den Pull abzuschließen.

In der Vergangenheit wurde die Zusammenführung stillschweigend mit einer Standard-Festschreibungsnachricht (in Anlehnung an Merge branch 'dev' of remote.com:/repo into dev) durchgeführt.

Ich habe git kürzlich auf Version 1.7.11.3 (über Homebrew) aktualisiert, kann mir aber nichts anderes vorstellen, was ich getan hätte, um dieses Verhalten zu ändern. Ist dies eine Einstellung oder gibt es eine andere Möglichkeit, wieder zu dem zurückzukehren, was es war?

Shanebonham
quelle

Antworten:

158

In Git 1.7.10 entschieden die Git-Entwickler, dass Zusammenführungs-Commits zu einfach gemacht werden könnten. Wie in diesem Blog-Beitrag erläutert , sollte das Erzwingen des Verhaltens interaktiver Festschreibungsnachrichten diese Festschreibungsnachrichten detaillierter machen und die Gesamthäufigkeit unnötiger Zusammenführungen verringern.

Sie können das --no-editFlag verwenden, um dieses Verhalten zu vermeiden, aber nicht. Zusammenführungs-Commits sollten wie alle Commits zur Geschichte gut konstruiert sein. Ihre Geschichte sollte nur nützlich sein.

Christopher
quelle
54
Danke für die Hilfe. Ich bin nicht der Meinung, dass Merge Commits immer beschreibend sein sollten. Der Grund, warum ich dies nachgeschlagen habe, ist, dass ich bei automatischen Zusammenführungen bei jedem Pull gefragt werde, warum die Zusammenführung erforderlich ist. Dies wird schnell unangemessen, da dies sogar dann der Fall ist, wenn ich keine Änderungen vorgenommen habe.
Brian
10
Dies ist auch eine nützliche Ressource, um dieses Verhalten zu vermeiden : longair.net/blog/2009/04/16/git-fetch-and-merge Sie sollten dies vermeiden git pull. Verwenden git merge --ff-onlySie diese Option, wenn Sie nur versuchen, ein Update durchzuführen, und Sie nicht glauben, dass Sie lokale Änderungen vorgenommen haben. Verwenden git merge --no-ffSie diese Option, wenn Sie tatsächlich versuchen, einen Zweig zusammenzuführen.
Glyphe
6
Gibt es ein Konfigurationsflag, um dies auszuschalten? Es ist ärgerlich, jedes Mal --no-edit eingeben zu müssen.
LandonSchropp
Genial. Vielen Dank für das Teilen von @Christopher.
LandonSchropp
3
@ SeanCoetzee: Das hängt von Ihrer $EDITOREinstellung ab, aber wenn Sie git out of the box unter OSX verwenden, handelt es sich wahrscheinlich um ein Programm namens 'vi' . Geben Sie ein i, um den "INSERT" -Modus aufzurufen. Geben Sie Ihre Nachricht ein. Sie können dann speichern und beenden, indem Sie drücken ESCund dann tippen :wq.
Christopher
58

So erstellen Sie eine Verknüpfung für die zukünftige Verwendung:

Bearbeiten Sie Ihre ~/.gitconfigmit den folgenden:

[core]
    mergeoptions = --no-edit

Oder führen Sie im Terminal Folgendes aus

git config --global core.mergeoptions --no-edit

Dallas Clark
quelle
13
Dies hat bei mir nicht funktioniert (Git unter OSX), und ich habe es richtig eingestellt, indem ich mir die Ausgabe von angesehen habe git config --global core.mergeoptions.
Jvannistelrooy
Terminal Befehl sollte wie folgt seingit config core.mergeoptions --no-edit
S. Mert
@ SimsekMert, der nur die .gitconfig im aktuellen Respository bearbeitet, nicht global für jedes Git-Repository
Dallas Clark
@AbhishekGoel Es besteht die Möglichkeit, dass Sie Terminal neu starten müssen, damit die Änderungen wirksam werden
Dallas Clark
@jvannistelrooy Es besteht die Möglichkeit, dass Sie Terminal neu starten müssen, damit die Änderungen wirksam werden
Dallas Clark
11

Beachten Sie zunächst die Warnungen in Christophers Antwort oben.

Wenn Sie die automatische Bearbeitung von Merge-Commit-Nachrichten weiterhin deaktivieren möchten, legen Sie diese Umgebungsvariable fest:

    GIT_MERGE_AUTOEDIT=no

Diese Umgebungsvariable und ihre Einstellung "no" sind auf der Seite " git merge doc " dokumentiert . Es wird empfohlen, es nur in Skripten zu verwenden, die nicht interaktiv zusammengeführt werden müssen. Natürlich kann es als Teil Ihrer Shell-Umgebung festgelegt werden, um die Auswirkungen dauerhafter zu gestalten.

Emackey
quelle
Können Sie erklären, wie dies anders sein kann als die Verwendung der --no-editFlagge?
Alexander Mills
2
Ich kenne keinen funktionalen Unterschied, aber der Convenience-Faktor macht es lohnenswert. Das --no-editFlag muss bei jeder Verwendung in der Befehlszeile wiederholt werden, da es in den Einstellungen, wie in der Antwort von Dallas Clark hier beschrieben, nicht zu funktionieren scheint. Das Festlegen der Umgebungsvariablen ist die einzige Möglichkeit, diese Einstellung beizubehalten.
Emackey