por Vali Shah
Como um Desenvolvedor, muitos de nós têm de escolher entre a Série e Rebase. Com todas as referências que recebemos da internet, todos acreditam que “não use Rebase, pode causar sérios problemas.”Aqui vou explicar o que são a junção e o ajuste, por que você deve (e não deve) usá-los, e como fazê-lo.
git Merge e git Rebase servem o mesmo propósito. Eles são projetados para integrar mudanças de múltiplos ramos em um., Embora o objetivo final seja o mesmo, esses dois métodos o alcançam de maneiras diferentes, e é útil saber a diferença à medida que você se torna um desenvolvedor de software melhor.esta questão dividiu a comunidade Git. Alguns acreditam que você deve sempre refazer e outros que você deve sempre fundir. Cada lado tem benefícios convincentes.
git Merge
Merge é uma prática comum para desenvolvedores que usam sistemas de controle de versões. Se os ramos são criados para testes, correções de bugs, ou outras razões, a junção comete mudanças para outro local., Para ser mais específico, a fusão pega o conteúdo de um branch fonte e integra-os com um branch alvo. Neste processo, apenas o ramo alvo é alterado. A história do ramo fonte permanece a mesma.,da2a4595a”>
Vantagens
- Simples e familiar
- Preserva a história completa e na ordem cronológica
- Mantém o contexto do ramo
Contras
- Commit história pode se tornar poluída, por lotes, da série compromete-se
- Depuração usando
git bisect
pode se tornar mais difícil
Como fazer
Merge do branch master no ramo de funcionalidade usando o checkout
e merge
comandos.,
$ git checkout feature$ git merge master(or)$ git merge master feature
Isto irá criar um novo “Merge commit” no ramo de recursos que detém o histórico de ambos os ramos.
git Rebase
Rebase é outra forma de integrar mudanças de um ramo para outro. Rebase comprime todas as alterações num único ” sistema transdérmico.”Então integra o patch no ramo alvo.
Ao contrário de mesclar, o reajustamento simplifica o histórico porque transfere o trabalho completo de um ramo para outro. No processo, a história indesejada é eliminada.,
Realoca são como as mudanças devem passar a partir do topo da hierarquia para baixo, e mescla são como elas fluem de volta para cima
Vantagens
- Agiliza potencialmente complexa história
- a Manipulação de um único commit é fácil (por exemplo,, revertê-los)
- Evita série cometer o “ruído” em ocupado acordos de recompra com ocupada ramos
- Limpa intermediário compromete-se, tornando-os um único commit, o que pode ser útil para DevOps equipes
Contras
- Esmagar o recurso para baixo para um punhado de compromete-se pode ocultar o contexto
- a alteração da base de repositórios públicos podem ser perigosas quando se trabalha em equipe
- É mais do trabalho: a Utilização de alterar a base para manter o seu ramo de funcionalidade actualizada sempre
- a Realocação com filiais remotas requer que você force push., O maior problema que as pessoas enfrentam é forçarem o empurrão, mas não definiram o padrão do git push. Isso resulta em atualizações para todos os ramos com o mesmo nome, tanto localmente como remotamente, e isso é terrível de lidar.
se você refazer incorretamente e não intencionalmente reescrever o histórico, ele pode levar a problemas graves, então certifique-se de que sabe o que está fazendo!
How to do it
Rebase the feature branch into the master branch using the following commands.,
$ git checkout feature$ git rebase master
isto move todo o ramo de funcionalidades no topo do ramo principal. Ele faz isso reescrevendo o histórico do projeto, criando novos commits para cada commit no branch original (feature).
rebase interactiva
isto permite alterar os commits à medida que são movidos para o novo ramo. Isto é mais poderoso do que o ajuste automático, pois oferece controle completo sobre o histórico de commit do ramo. Tipicamente isto é usado para limpar um histórico confuso antes de fundir um ramo de recurso em master.,
$ git checkout feature$ git rebase -i master
Isto irá abrir o editor listando todos os commits que estão prestes a ser movidos.
pick 22d6d7c Commit message#1pick 44e8a9b Commit message#2pick 79f1d2h Commit message#3
isto define exactamente como é que o ramo se parecerá após o ajuste. Ao reordenar as Entidades, você pode fazer a história parecer o que quiser. Por exemplo, você pode usar comandos como fixup
squash
edit
etc, no lugar de pick
.
qual usar
so what’s best?, O que recomendam os especialistas?
é difícil generalizar e decidir sobre uma ou outra, uma vez que cada equipe é diferente. Mas temos de começar por algum lado.as equipas de
precisam de considerar várias questões ao definir as suas políticas de ajuste do Git vs. junção. Porque, ao que parece, uma estratégia de fluxo de trabalho não é melhor do que a outra. Depende da sua equipa.
considere o nível de rebasing e competência Git em toda a sua organização. Determinar o grau em que você valoriza a simplicidade de rebasing em comparação com a rastreabilidade e história da fusão.,por último, as decisões relativas à fusão e ao rebasing devem ser consideradas no contexto de uma estratégia de ramificação clara (ver este artigo para compreender mais sobre a estratégia de ramificação). Uma estratégia de ramificação bem sucedida é projetada em torno da organização de suas equipes.
o que recomendo?
À medida que a equipa cresce, tornar-se-á difícil gerir ou rastrear alterações de desenvolvimento com uma política de sempre mesclar. Ter um histórico de commit limpo e compreensível, usar Rebase é razoável e eficaz.,
considerando as seguintes circunstâncias e orientações, você pode obter o melhor resultado do Rebase:
- está a desenvolver-se localmente: se não partilhou o seu trabalho com mais ninguém. Neste momento, você deve preferir rebasing sobre a fusão para manter a sua história arrumada. Se você tem seu garfo pessoal do repositório e que não é compartilhado com outros desenvolvedores, você está seguro para refazer mesmo depois de ter empurrado para o seu branch.
- seu código está pronto para revisão: você criou um pedido de puxar. Outros estão revendo seu trabalho e estão potencialmente obtendo-o em seu garfo para revisão local., Neste momento, você não deve refazer o seu trabalho. Você deve criar’ rework ‘ commits e atualizar seu ramo de recursos. Isso ajuda com a rastreabilidade no pedido pull e evita a quebra acidental da história.
- a revisão está feita e pronta para ser integrada no ramo alvo. Meus parabéns! Estás prestes a apagar o teu ramo de recurso. Dado que outros desenvolvedores não serão fetch-merging nestas mudanças a partir deste ponto, esta é a sua chance de sanitar o seu histórico., Neste ponto, você pode reescrever o histórico e dobrar os commits originais e aqueles ‘PR rework’ e ‘merge’ commits em um pequeno conjunto de commits focados. Criar uma junção explícita para estes commits é opcional, mas tem valor. Ele grava quando o recurso se formou para mestre.
conclusão
espero que esta explicação tenha dado algumas ideias sobre a junção do Git e o ajuste do Git. Merge vs rebase estratégia é sempre discutível. Mas talvez este artigo ajude a dissipar as suas dúvidas e permita que adopte uma abordagem que funcione para a sua equipa.