Git merge vs rebase: sair de Merge Conflict City..
Merge parece fácil até o conflito. Rebase também. Entenda a diferença prática e como resolver conflitos sem drama de engenheiro 10x de meme.
Resposta direta
Merge e rebase são ferramentas de história: escolha pelo contrato do time e pratique resolução de conflito — meme 10x não ajuda. Com uma mergida, então eu tenho dois fios, um fio principal e então este fio de tema que tem que ser mergido para principal, ele também me disse que há algum tipo de conflito, mas eu deveria resolver isso eu mesmo, ok,.
O meme do engenheiro 10x e o buraco real
Mas o que se eu te dissesse que você poderia fazer tudo isso em metade do tempo com um visual streamlado e um fluxo de trabalho realmente agradável? Com uma mergida, então eu tenho dois fios, um fio principal e então este fio de tema que tem que ser mergido para principal, ele também me disse que há algum tipo de conflito, mas eu deveria resolver isso eu mesmo, ok, eu acho que sou o desenvolvedor, então vamos começar com o problema, calculação de bug está erro quando adicionar números. Então, aqui eu tenho minha página .tsx, então dentro disso eu rendo um componente de header e um componente de calculador, então eu quero abrir o componente de calculador, então eu tenho algumas funções e aqui eu tenho uma função de calculação e quando um usuário aqui usa o plus, então eu retorno essa função de adição.
Isso significa que eu quero saber quem fez o erro, eu fiz o erro ou meu co-worker John? Eu posso abrir meu terminal, então eu vou abrir um segundo tabu terminal e dentro aqui eu quero que você conheça primeiro o que eu até fiz ou em geral quantos comitês esta aplicação tem. Isso significa que aqui eu posso dizer git log one line dash ten, isso significa que eu vou ter os dez mais recentes comitês e como você vê aqui, esses são todos os meus comitês.
O que merge preserva
Eu agora sei quais comitês eu tenho, mas isso não me diz quais comitês quebraram este arquivo específico ou, para ser específico, esta função específica. Isso significa que o que eu posso fazer é dizer, diga, log uma linha e eu quero especificamente só log os comitês que aqui tocam este arquivo. This means I can use this "-p", and then I want to again specifically log this file, and with that I will know who made the mistake.
Scroll to the bottom, I get a div, a nice looking div, and this is how my function worked at first, this means return A plus B, everything was fine, but then I decided to break everything, and right here say A minus B. So as we now see, we get our result, I get the commit ID, the commit char, I also get the author, the date, I get my div, I now know I made the mistake, everything is great, but you know what, this way of debugging, Logging this commit history is kinda very beginner-like. What I mean by that is we have to log a lot of things, git log dash p, I have to type a lot of things.
Na prática
Merge e rebase são ferramentas de história: escolha pelo contrato do time e pratique resolução de conflito — meme 10x não ajuda.
O que rebase reescreve
Então, se olharmos para a história do comando aqui ou no gráfico do comando, então eu posso dizer que provavelmente este é o comando bom e este comando recente é o comando ruim. Se este é o comitê bom, ele vai novamente ir ao meio, e então vamos dizer a Git se este é um comitê bom ou um comitê ruim. Eu acho que é um pouco confuso, mas não se preocupe, deixe-me mostrar para você, porque é bastante fácil de usar, para ser honesto com você.
Então, primeiro de tudo, podemos apenas abrir um novo tab terminal e então, dentro disso, eu quero dizer git bisect start para iniciar uma nova sessão. Agora, para conseguir o ID do comitê, eu posso usar a gravação de fonte e como você vê aqui, eu tenho muitos comitês, mas eu acho que este aqui é realmente um bom comitê. Então agora eu exigei essa sessão e nós agora sabemos quem fez o erro e quando o erro foi feito, o que significa que eu vou ser atirado em breve.
Estratégia de conflito sem pânico
A plus B and you know what I will delete this comment and then the next step is to actually push this. I created this commit message and now the last step is to merge it into main so I will say git check out main, I'm now in the main branch, and inside of here I can say git merge fix calculator addition bug. So we are finished with task number one, and now I can continue with the second task assigned to me, and that's to merge this branch theme feature into my main branch.
Status, eu quero saber exatamente o que está errado, diz novo, então isso é bom, mas aqui nós temos dois problemas, então para o fio do calculador e também eu tenho um conflito de mergulho para o fio do header, então, desde que eu estou no código de VSCode, infelizmente, eu realmente peço alguns bons ajudantes, isso significa que se eu for para o header, eu instantaneamente peço essa anotação, agora, quais são estes pontos quais são estes sinais equais boa pergunta então é isso que você chama de conflito mergers and I know it looks confusing, it can be confusing but essentially we have the head and then we have our branch. Isso é bom, honestamente, eu acho que podemos mergear isso, isso significa que eu posso voltar de novo, eu vou entrar nesse terminal, deixe-me entrar na minha parte principal de novo e então eu quero dizer merge git e eu quero mergear minha parte de funções tema de novo, eu pego meu conflito aqui e agora eu tenho algumas opções, eu posso aceitar o mudança atual, aceitar o mudança vinda, aceitar ambos os mudanças, eu posso compará-los No entanto, aqui, esses mudanças parecem bem para mim, o que significa que eu vou apenas aceitar os mudanças vindo. No entanto, nós ainda temos um problema, que nossa branch está em frente da origem principal, então eu posso apenas abrir o controle de fonte e sincronizar meus mudanças.
Convenções de time que evitam dor
É 2025, eu não quero abrir meu terminal cada vez que eu tiver que debugar algo ou quando eu tiver que mergear uma branca. Seria muito legal apenas para apagar e desligar uma branca para o principal ou, por exemplo, para ter algum tipo de interface de interface de inteligência para aqui culpar alguém. Eu não quero que você faça um git log, eu quero que você tenha algum tipo de solução que é talvez uma pequena abstracção sobre git, mas ao mesmo tempo algo que streamline e simplifica meu fluxo de trabalho.
Isso significa que tudo que você faz com o Git pode ser feito aqui no código Inverse sem nunca abrir o terminal. Em vez disso, eu posso abrir a extensão de GIT Lens e aqui eu já tenho um pad de lançamento e esse pad de lançamento é praticamente como minha lista de to-do, então eu posso começar a trabalhar em um problema e eu quero trabalhar nesse problema, então como você pode ver, GIT Lens agora sincronizou meus problemas do Github, então sim, essa calculação de problema bug está quebrada, se eu pular sobre esses três pontos, eu também Então, vamos começar com. Então, eu posso, primeiro de tudo, já resolver esse problema, então A mais B, eu posso deletar o comentário, mas como vocês sabem, eu quero culpar alguém.
Sinais de que está funcionando
Mudanças não comprometidas, isso é bom, é porque adicionamos a mais b, mas aqui é a coisa mais interessante aqui temos este diálogo, popover, o que quer que seja, e esta é a história do arquivo, então um segundo atrás, isso é o que tínhamos a menos b e agora temos a mais b, então isso já é bastante poderoso, mas ainda não me diz quem fez o erro agora, nós já sabemos que eu fiz o erro, mas vamos Vamos imaginar que não o fazemos. E no meio, nós praticamente temos um separador e isso é uma mapa de calor, então este arquivo a mais b foi mudado bastante frequentemente, o que significa que tem uma cor diferente, tem essa cor vermelha escura, enquanto que tem uma cor violeta. Então por agora eu quero olhar para a história da linha, eu posso ir aqui e como você pode ver, essa linha teve em total três mudanças.
Também tenho a história da linha, então este arquivo foi mudado em total agora quatro vezes o comitê inicial, então a mudança novamente outra mudança e então tenho este mudança não-cometida e a coisa legal é que se eu clicar neste mudança, eu instantaneamente, claro, recebo o div e se eu pular sobre ele, também recebo o mensagem de comitê e claro o xar o id o comit id então isso parece bom, estamos terminando com a história da linha, a história do arquivo Nós sabemos que Jan Marshall fez o erro, nós sabemos quem podemos atirar. Agora eu posso clicar no botão de criar pedido de pula ou eu posso clicar nesse botão mágico e isso vai criar um pedido de pula com AI. De novo, abrimos o GitLens, você verá algo interessante, então este problema está agora fixado, por isso temos este cor azul, está fechado e também tudo foi mergido em nosso fonte de alvo, isso significa em principal, então se novamente abrirmos a janela de controle de fonte e se olharmos para o gráfico, então você verá aqui que nossa fonte foi mergida em principal, então isso está terminado, mas como todos sabem, temos a fonte de funções do tema e eu quero mergir Desbranche para o principal.
O que evitar na primeira semana
Se você abrir seu terminal com o comando J, por exemplo, mas não, eu não quero usar o terminal, ao invés disso, eu quero abrir Gitlens. So this is the commit that I was searching for and that's also the commit, or in other words the branch, which I want to merge. In this application, in GitKraken Desktop, or I can go back to my GitLens or to VS Code, and I can again fix it inside of here.
So I will do it in the GitKraken Desktop application, I can click on the file, and as you see right here, this is A, this is B, this is my main branch, this is my theme feature branch, and you know what? Isso significa que se eu clicar em mais, eu vou usar esta linha específica se eu clicar aqui em mais eu vou usar esta linha ou eu vou usar ambas as linhas, mas eu não quero fazer isso, eu quero usar este aqui, o fio de fecha, o que significa que eu posso apenas clicar em mais em todos os lugares e então ele vai usar esta seção agora eu poderia também fazer isso mais fácil e apenas clicar neste botão e então eu vou clicar em salvar, então isso também está terminado e então eu posso apenas cometer e mergir minha área para o principal O merge foi sucesso e se eu voltar ao VS Code, eu posso ver isso aqui novamente. Em geral, a plataforma de experiência de desenvolvedores, então, por favor, use o link na descrição do meu YouTube porque você vai ganhar 50% de GitKraken Pro e isso vai te dar todas essas funções de AI que realmente funcionam muito, muito bem.
Na prática
Próximo passo para «git-merge-vs-rebase-conflitos»: rode um experimento de 7 dias com uma métrica ligada a git merge vs rebase conflitos antes de escalar o padrão.