Eu sou o único na minha organização que está fazendo confirmações com a seguinte mensagem:
Mesclar ramo de rastreamento remoto 'origin / develop' em develop
Não tenho certeza do que estou fazendo para causá-los, mas gostaria de parar.
Qual comando estou emitindo para criar esse commit e qual é o comando adequado que devo usar para não produzi-lo?
git
branching-and-merging
git-merge
git-remote
Jordan Feldstein
fonte
fonte
git pull --autostash --rebase
o trabalho para você @Johnjohn?Respostas:
git pull
provavelmente está criando o commit. Se você fizer uma confirmação local e depois executargit pull
depois que outra pessoa enviar uma confirmação para o repositório, o Git fará o download da confirmação do outro desenvolvedor e a mesclará na sua filial local.Como evitar esses commits de mesclagem no futuro
Você pode usar
git pull --rebase
para impedir que isso aconteça no futuro, mas o rebaseamento tem seus perigos, e eu recomendo evitarpull
completamente .Em vez disso, recomendamos que você siga este padrão de uso:
Explicação
git remote update -p
baixa todas as confirmações nos repositórios remotos e atualiza as ramificações de rastreamento remoto (por exemplo,origin/master
). NÃO toca no diretório de trabalho, índice ou ramificações locais.As
-p
ameixas do argumento excluíram ramos upstream. Assim, se ofoo
ramo for excluído noorigin
repositório,git remote update -p
ele excluirá automaticamente suaorigin/foo
referência.git merge --ff-only @{u}
diz ao Git para mesclar a ramificação upstream (o@{u}
argumento) em sua ramificação local, mas somente se sua ramificação local puder ser "encaminhada rapidamente" para a ramificação upstream (em outras palavras, se não tiver divergido).git rebase -p @{u}
move efetivamente os commits que você fez, mas ainda não colocou no topo da ramificação upstream, o que elimina a necessidade de criar os commits parvos de mesclagem que você está tentando evitar. Isso melhora a linearidade do histórico de desenvolvimento, facilitando a revisão.A
-p
opção diz ao Git para preservar mesclagens. Isso evita que o Git linearize os commits sendo rebased. Isso é importante se, por exemplo, você mesclou uma ramificação de recursomaster
. Sem-p
, todo commit no ramo do recurso seria duplicadomaster
como parte da linearização feita porgit rebase
. Isso dificultaria a revisão do histórico de desenvolvimento, não mais fácil.Cuidado :
git rebase
pode não fazer o que você espera, então revise os resultados antes de pressionar. Por exemplo:Prefiro essa abordagem
git pull --rebase
pelos seguintes motivos:-p
(--preserve-merges
) para ogit rebase
caso de precisar refazer uma mesclagem intencional (por exemplo, mesclagem de uma ramificação de recurso já enviada paramaster
).Taquigrafia: em
git up
vez degit pull
Para facilitar o procedimento acima, recomendo criar um alias chamado
up
:Agora, tudo o que você precisa fazer para atualizar sua filial é executar:
em vez de
git pull
. Se você receber um erro porque sua filial local divergiu da filial upstream, essa é sua sugestão para refazer a ação.Por que não
git pull --rebase
?Corrida
git pull --rebase
é equivalente a corridagit fetch
seguida porgit rebase
. Isso tenta avançar rapidamente para as novas confirmações upstream, mas se isso não for possível, ele rebase suas confirmações locais para as novas confirmações upstream. Isso geralmente é bom, mas tenha cuidado:git pull --rebase
não lhe dá a oportunidade de examinar os commits antes de incorporá-los. Dependendo do que a montante mudou, é bem possível que rebase é a operação de um errorebase --onto
,merge
,reset
oupush -f
pode ser mais apropriado do que uma planícierebase
.--preserve-merges
para a operação de rebase, portanto, qualquer mesclagem intencional de uma ramificação de recurso será linearizada, reproduzindo (e, portanto, duplicando) todas as confirmações de ramificação de característica."Corrigindo" uma consolidação de mesclagem existente criada por
git pull
Se você ainda não enviou uma confirmação de mesclagem criada por
git pull
, é possível recuperar novamente a confirmação de mesclagem. Supondo que você não tenha feito nenhuma fusão intencional (por exemplo, mesclando uma ramificação de recurso já enviada à sua ramificação atual), faça o seguinte:O comando acima informa ao Git para selecionar todos os commits de não mesclagem alcançáveis
HEAD
(o commit atual), menos todos os commits alcançáveis@{u}
(que é uma abreviação de "o ramo upstream", isto é,origin/master
seHEAD
houvermaster
), reproduzir novamente (cherry-pick ) na parte superior da ramificação upstream e, em seguida, mova a referência da ramificação atual para apontar para o resultado da reprodução das confirmações. Isso efetivamente move as confirmações de não mesclagem para a confirmação upstream mais recente, o que elimina a mesclagem criada porgit pull
.Se você tem uma consolidação intencional de mesclagem, não deseja executar,
git rebase @{u}
porque ela reproduzirá tudo da outra ramificação. Lidar com esse caso é substancialmente mais complicado, e é por isso que é bom usargit up
e evitargit pull
completamente. Você provavelmente precisará usarreset
para desfazer a mesclagem criada porpull
e depois fazergit rebase -p @{u}
. O-p
argumentogit rebase
não funcionou de maneira confiável para mim; portanto, você pode acabar tendo quereset
desfazer a mesclagem intencional, atualizar sua ramificação local@{u}
e depois refazer a mesclagem intencional (que é uma dor se houver muitas mesclagens peludas conflitos).fonte
-p
. Evitei recomendá-lo antes porque não é necessário com muita frequência e seu comportamento não está bem documentado.git remote update -p
egit fetch
?git remote update -p
é o mesmo quegit fetch --all -p
. Eu tinha o hábito de usar degit remote update -p
volta quandofetch
não tinha a-p
opção.Isso deve resolver. Ou se você quiser continuar usando pull
Você também pode configurar essa ramificação na sua configuração para se recuperar automaticamente, ou ser configurada dessa maneira automaticamente para quaisquer outras ramificações de rastreamento futuras que você criar. Então você pode voltar a usar apenas
Mais sobre isso na seção "puxar com rebase em vez de mesclar" desta página:
http://mislav.uniqpath.com/2010/07/git-tips/
fonte