Por que o git está solicitando uma mensagem de confirmação de mesclagem pós-extração?


142

Recentemente, após qualquer um git pull, o git começou a gerar meu editor de texto e a solicitar uma mensagem de confirmação de mesclagem. Uma mensagem de confirmação já está pré-preenchida e só preciso salvar e fechar a janela para concluir a solicitação.

No passado, ele fazia a mesclagem silenciosamente, com uma mensagem de confirmação padrão (na linha de Merge branch 'dev' of remote.com:/repo into dev).

Atualizei recentemente o git para a versão 1.7.11.3 (via homebrew), mas não consigo pensar em mais nada que eu possa ter feito para mudar esse comportamento. Essa é uma configuração ou existe alguma maneira de voltar ao que era antes?

Respostas:


157

No git 1.7.10, os desenvolvedores do git decidiram que os commits de mesclagem poderiam ser feitos com muita facilidade. Conforme explicado nesta postagem do blog, forçar o comportamento da mensagem de confirmação interativa deve tornar essas mensagens mais detalhadas e reduzir a frequência geral de mesclagens desnecessárias.

Você pode usar o --no-editsinalizador para evitar esse comportamento, mas, bem, não. Confirmações de mesclagem, como qualquer confirmação de história, devem ser bem construídas. Sua história não deve ser senão útil.


54
Obrigado pela ajuda. Eu discordo que os commits de mesclagem devem ser sempre descritivos. O motivo pelo qual procurei isso é porque as mesclagens automáticas sempre que recebo solicitam que eu explique por que a mesclagem é necessária, o que rapidamente se torna irracional, já que é o que ocorre quando não há alterações.
Brian

10
Este também é um recurso útil para evitar este comportamento: longair.net/blog/2009/04/16/git-fetch-and-merge Você deve evitar git pull; use git merge --ff-onlyse você está apenas tentando atualizar e não acha que possui alterações locais; use git merge --no-ffse você estiver realmente tentando mesclar uma ramificação.
Glyph

6
Existe um sinalizador de configuração para desativar isso? É chato ter que digitar --no-edit sempre.
LandonSchropp

Impressionante. Obrigado por compartilhar @Christopher.
LandonSchropp

3
@SeanCoetzee: Depende da sua $EDITORconfiguração, mas se você estiver usando o git imediatamente no OSX, é provavelmente um programa chamado 'vi' . Digite ipara entrar no modo "INSERIR"; Digite sua mensagem. Você pode salvar e sair pressionando ESCe digitando :wq.
12123 Christopher

58

Para criar um atalho para uso futuro:

Edite o seu ~/.gitconfigcom o seguinte:

[core]
    mergeoptions = --no-edit

Ou execute o seguinte no Terminal

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


13
Isso não funcionou para mim (git no OSX), e eu o configurei corretamente, observando a saída de git config --global core.mergeoptions.
precisa saber é o seguinte

comando terminal deve ser como abaixo #git config core.mergeoptions --no-edit
S. Mert 26/11

@SimsekMert que só vai editar o .gitconfig no repositório atual, não globalmente para cada repositório git
Dallas Clark

@AbhishekGoel há uma chance de que você pode precisar reiniciar o Terminal para que as alterações tenham efeito
Dallas Clark

@jvannistelrooy há uma chance de que você pode precisar reiniciar o Terminal para que as alterações tenham efeito
Dallas Clark

11

Primeiro, preste atenção aos avisos na resposta de Christopher acima.

Em seguida, se você ainda deseja desativar a edição automática da mensagem de confirmação de mesclagem, configure esta variável de ambiente:

    GIT_MERGE_AUTOEDIT=no

Essa variável de ambiente e sua configuração "não" estão documentadas na página de documento de fusão do git . É recomendável usá-lo apenas em scripts que precisam ser mesclados de maneira não interativa, mas é claro que ele pode ser definido como parte do ambiente do shell para tornar seus efeitos mais permanentes.


Você pode explicar como isso pode ser diferente do que usar a --no-editbandeira?
Alexander Mills

2
Não conheço uma diferença funcional, mas o fator de conveniência faz valer a pena. O --no-editsinalizador deve ser repetido na linha de comando a cada uso, pois não parece funcionar nas configurações descritas na resposta de Dallas Clark aqui. Definir a variável de ambiente é a única maneira que conheço para manter essa configuração.
Emackey # 1/18
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.