Perché git mi richiede un messaggio di commit della fusione post-pull?


142

Di recente, a seguito di qualsiasi git pull, git ha iniziato a generare il mio editor di testo e a chiedere un messaggio di commit unione. Un messaggio di commit è già precompilato e devo solo salvare e chiudere la finestra per completare il pull.

In passato, avrebbe fatto l'unione in silenzio, con un messaggio di commit standard (lungo le linee di Merge branch 'dev' of remote.com:/repo into dev).

Di recente ho aggiornato git alla versione 1.7.11.3 (tramite homebrew), ma non riesco a pensare a nient'altro che avrei potuto fare per cambiare questo comportamento. Si tratta di un'impostazione o esiste un altro modo per tornare al modo in cui era?

Risposte:


157

In git 1.7.10, gli sviluppatori di git hanno deciso che gli commit di merge potevano essere fatti troppo facilmente. Come spiegato in questo post del blog, forzare il comportamento del messaggio di commit interattivo dovrebbe rendere questi messaggi di commit più dettagliati e ridurre la frequenza complessiva di fusioni non necessarie.

Puoi usare la --no-editbandiera per evitare questo comportamento, ma, beh, non farlo. Unisci commit, come qualsiasi altro commit nella storia, dovrebbe essere ben costruito. La tua storia non dovrebbe essere altro che utile.


54
Grazie per l'aiuto. Non sono d'accordo sul fatto che l'unione degli impegni dovrebbe essere sempre descrittiva. Il motivo per cui ho cercato questo è perché le fusioni automatiche ogni volta che tiro mi chiedono di spiegare perché l'unione è necessaria, il che diventa rapidamente irragionevole dal momento che lo sta facendo anche quando non ho alcuna modifica.
Brian,

10
Questa è anche una risorsa utile per evitare questo comportamento: longair.net/blog/2009/04/16/git-fetch-and-merge Dovresti evitare git pull; utilizzare git merge --ff-onlyse si sta solo tentando di aggiornare e non si ritiene di avere modifiche locali; utilizzare git merge --no-ffse si sta effettivamente tentando di unire un ramo.
Glifo

6
C'è una bandiera di configurazione per disattivarla? È fastidioso dover digitare --no-edit ogni volta.
LandonSchropp,

Eccezionale. Grazie per aver condiviso @Christopher.
LandonSchropp,

3
@SeanCoetzee: dipende dalle tue $EDITORimpostazioni, ma se stai usando git out of the box su OSX è probabilmente un programma chiamato 'vi' . Digitare iper accedere alla modalità "INSERISCI"; scrivi il tuo messaggio. È quindi possibile salvare ed uscire premendo ESCe quindi digitando :wq.
Christopher,

58

Per creare una scorciatoia per uso futuro:

Modifica il tuo ~/.gitconfigcon il seguente:

[core]
    mergeoptions = --no-edit

O eseguire quanto segue nel Terminale

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


13
Questo non ha funzionato per me (git su OSX) e l'ho impostato correttamente, guardando l'output di git config --global core.mergeoptions.
jvannistelrooy,

il comando terminale dovrebbe essere come sottogit config core.mergeoptions --no-edit
S. Mert,

@SimsekMert che modificherà solo il file .gitconfig nell'attuale repository, non a livello globale per ogni repository git
Dallas Clark,

@AbhishekGoel c'è la possibilità che tu possa dover riavviare Terminal affinché le modifiche abbiano effetto
Dallas Clark,

@jvannistelrooy c'è la possibilità che tu possa aver bisogno di riavviare Terminal per rendere effettive le modifiche
Dallas Clark,

11

Innanzitutto, fai attenzione agli avvertimenti nella risposta di Christopher sopra.

Quindi, se si desidera ancora disabilitare la modifica automatica dei messaggi di commit unione, impostare questa variabile di ambiente:

    GIT_MERGE_AUTOEDIT=no

Questa variabile d'ambiente e la sua impostazione "no" sono documentate nella pagina del documento git merge . Si consiglia di usarlo solo negli script che devono unirsi in modo non interattivo, ma ovviamente può essere impostato come parte dell'ambiente shell per rendere i suoi effetti più permanenti.


Puoi spiegare come potrebbe essere diverso dall'uso della --no-editbandiera?
Alexander Mills,

2
Non conosco una differenza funzionale, ma il fattore convenienza lo rende utile. La --no-editbandiera deve essere ripetuta sulla riga di comando ad ogni utilizzo, in quanto non sembra funzionare nelle impostazioni come descritto nella risposta di Dallas Clark qui. L'impostazione della variabile di ambiente è l'unico modo che conosco per rendere questa impostazione stick.
emackey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.