Existe alguma desvantagem em habilitar o git rerere?

107

Eu li várias coisas sobre o recurso de rerre do git e estou pensando em ativá-lo. Mas eu não vi ninguém mencionar quaisquer possíveis problemas que possam surgir durante o uso. Devo assumir que há uma desvantagem, ou provavelmente estaria habilitado por padrão. Então, há alguma desvantagem em habilitar o novo recurso? Que problemas em potencial isso pode causar que não ocorreria de outra forma?

Ryan C. Thompson
fonte
Quando o reler automático está habilitado e aplica uma resolução anterior, ele exibe uma mensagem? Se sim, como é? TIA!
joeytwiddle de
1
@joeytwiddle, de acordo com este artigo , seria no formatoResolved 'index.html' using previous resolution.
sampablokuper

Respostas:

69

Se você fizer uma mesclagem incorreta, descarte-a e faça a "mesma" mesclagem novamente, ela ficará incorreta novamente. Você pode esquecer uma resolução gravada, no entanto. Da documentação :

git rerere forget <pathspec>

Isso redefine as resoluções de conflito que foram registradas novamente para o conflito atual em <pathspec>.

Tenha o cuidado de usá-lo em caminhos específicos; você não quer explodir todas as suas resoluções gravadas em todos os lugares. ( forgetsem argumentos foi preterido para evitar que você faça isso, a menos que você digite git rerere forget .para solicitá-lo explicitamente.)

Mas se você não pensar em fazer isso, pode facilmente acabar colocando essa mesclagem incorreta em seu histórico.

MatrixFrog
fonte
13
É por isso que rerereainda deixa os arquivos com conflitos marcados como não mesclados, de modo que você tem que adicioná-los manualmente (esperançosamente após inspecioná-los / testá-los) antes de enviar. Você sempre pode usar git checkout -m <path>para verificar a versão original do conflito e refazer a resolução, se necessário.
Cascabel
1
Isso faria sentido! Parece que você precisa de um novo alias.
Cascabel,
5
Acho que esse é provavelmente o problema principal. Habilitar a re-referência adiciona mais uma maneira de os erros aparecerem inesperadamente. Uma mesclagem que você aborta (ou melhor, desfaz ao excluí-la do histórico) ainda pode voltar para assombrá-lo mais tarde. Basicamente, ele introduz um segundo mecanismo de histórico que é ortogonal ao gráfico de histórico real.
Ryan C. Thompson,
3
@RyanThompson As fusões abortadas não afetam a nova leitura. (Muitas vezes gostaria que sim - às vezes abortei uma mesclagem porque configurei errado, então precisei fazer exatamente as mesmas resoluções quando configurei certo.) Quanto à exclusão de uma mesclagem do histórico, por que você faria isso faça isso?
Marnen Laibow-Koser
40

Como JC Hamano menciona em seu artigo " Diversão com reler "

  • Rerere lembra como você decidiu resolver as regiões em conflito;
  • Rerere também lembra como você retocou fora das regiões em conflito para se ajustar às mudanças semânticas;
  • Rerere pode reutilizar a resolução anterior, mesmo que você esteja mesclando duas ramificações com conteúdo diferente daquele que você resolveu anteriormente .

Mesmo as pessoas que usam reler por muito tempo muitas vezes não percebem o último ponto.

Portanto, se você ativar rerereum conteúdo muito amplo, poderá acabar com uma resolução de mesclagem surpreendente ou confusa por causa do último ponto.

VonC
fonte
15
Os pedaços conflitantes ainda precisam ser iguais; é bastante difícil dar um falso positivo.
Cascabel
3

Eu tenho reabilitado globalmente. Eu realmente não notei nenhum problema e geralmente parece tornar minha vida mais fácil.

Marnen Laibow-Koser
fonte
4
O mesmo aqui. Sem problemas em 2+ anos de uso.
Andrey Tarantsov
3

Eu escolhi um commit (no gitk) que continha apenas um arquivo binário. Cherrypick falhou devido a um conflito (o que é natural) e eu resolvi o conflito mantendo a escolha certa. Fiquei surpreso mais tarde ao descobrir em outro branch com rebase que minhas dlls não se comportaram - apenas para descobrir que não foram carregadas para o rebase como (eu especulo) resolução automática de conflito. Portanto, este é o único caso que encontrei (tendo reativado) de encontrar um comportamento contra-intuitivo (embora eu esteja certo de que é perfeitamente consistente).

Mr_and_Mrs_D
fonte
1
Cura:git rerere forget path/to/compiled/bin.dll
Mr_and_Mrs_D
No caso original, tive o conflito não na escolha
seletiva